Appearance
Docker环境
Docker Desktop 已成为容器化开发的首选工具,但在 Windows 上安装时,默认路径往往占用系统盘空间,且新版本引入了安全校验,导致安装失败。本文将带你从零开始, 自定义安装路径、修改镜像存储位置 ,并解决 must be owned by an elevated account 错误。无论你是 Kubernetes 初学者还是容器编排老手,这篇文章都能帮你省下 30% 的磁盘管理时间。
Windows上安装
一、安装前准备:确认虚拟化与 WSL2 状态
在开始安装 Docker Desktop 之前,需要确保系统满足最低要求。首先, 确认虚拟化已启用 :打开任务管理器,切换到“性能”选项卡,检查右下角“虚拟化”是否为“已启用”。如果未启用,请进入 BIOS 开启 Intel VT-x 或 AMD-V 技术。
其次,对于 Windows 10/11 家庭版用户,必须启用 WSL2(Windows Subsystem for Linux 2)。Docker 依赖 WSL2 来运行 Linux 容器,这是容器化部署的核心基础。建议在 PowerShell(管理员模式)中运行以下命令:
bash
wsl --install或者直接打开 Docker Desktop,当提示“WSL need updating”时,点击 Restart,然后按任意键自动安装。 提示: 确保系统已安装所有 Windows 更新,以避免兼容性问题。
二、命令行安装:指定 Docker 安装目录
默认情况下,Docker Desktop 会安装在 C:\Program Files\Docker\Docker ,但我们可以通过命令行强制指定路径。以下两种场景覆盖大多数情况。
场景 1:全新安装(管理员 PowerShell)
右键点击 PowerShell 图标,选择“以管理员身份运行”。切换到安装程序所在目录,并执行:
bash
cd C:\Users\01\Downloads
Start-Process -Wait -FilePath "Docker Desktop Installer.exe" -ArgumentList 'install', '-accept-license', '--installation-dir="D:\Program\Docker"'其中 `D:\Program\Docker` 是自定义文件夹路径,例如 D:\Docker\ 。安装过程中,会弹出选项:
- ✅ 勾选
`Install required Windows components for WSL 2` - ✅ 勾选
`Add shortcut to desktop`
点击 OK 开始安装,完成后系统会提示重启。重启后双击桌面 Docker Desktop 图标,首次启动可能需要登录 Docker Hub(免费注册即可)。
场景 2:清理旧数据后安装
如果之前安装过 Docker,建议先清除残留数据,避免冲突:
bash
# 以管理员身份运行
# 停止相关服务
Stop-Service com.docker.service -ErrorAction SilentlyContinue
# 删除旧的配置目录
Remove-Item "C:\ProgramData\DockerDesktop" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:\ProgramData\Docker" -Recurse -Force -ErrorAction SilentlyContinue
# 然后重新安装
cd C:\Users\01\Downloads
Start-Process -Wait -FilePath "Docker Desktop Installer.exe" -ArgumentList 'install', '-accept-license', '--installation-dir="D:\Program\Docker"'⚠️ 注意: 清理操作会删除所有容器和镜像,请提前备份重要数据。
[AFFILIATE_SLOT_1]
三、修改镜像默认保存路径(WSL 数据盘迁移)
Docker 默认将镜像、容器数据存储在 %UserProfile%\AppData\Local\Docker\wsl ,这会导致 C 盘迅速膨胀。通过 Docker Desktop 设置迁移即可:
- 打开 Docker Desktop,进入 Settings → Resources → Advanced 。
- 点击 Browse ,选择自定义路径(如
D:\DockerData)。 - 点击 Apply & Restart ,Docker 会在目标目录自动创建
DockerDesktopWSL子文件夹。
四、验证安装与常见错误解决
验证安装
安装并重启后,运行以下命令确认环境正常:
bash
docker --version如果显示版本号(例如 Docker version 27.0.0 ),说明安装成功。接着测试拉取镜像:
bash
docker run hello-world输出 Hello from Docker! 即表示容器运行正常。 此时你已经可以开始容器化部署了。
错误:must be owned by an elevated account
如果你在安装时遇到 `For security reasons C:\ProgramData\DockerDesktop must be owned by an elevated account` 错误,这是 Docker 为修复安全漏洞(CVE-2025-14740)新增的校验机制。该漏洞允许低权限用户预创建 `C:\ProgramData\DockerDesktop` 文件夹并篡改配置,从而以高权限执行恶意代码。解决方法如下:
步骤 1:删除问题文件夹
按下 `Win` + `S` ,输入 `powershell` ,右键以管理员身份运行 PowerShell。执行强制删除命令:
bash
Remove-Item -Path "C:\ProgramData\DockerDesktop" -Force -Recurse参数会强制删除任何属性的文件夹, 则会删除其内部的所有子项和文件。
步骤 2:以管理员身份重新安装
删除成功后,确保 PowerShell 仍在管理员模式,切换到安装目录:
bash
cd C:\Users\01\Downloads然后运行安装命令:
bash
Start-Process -Wait -FilePath "Docker Desktop Installer.exe" -ArgumentList 'install', '-accept-license', '--installation-dir="D:\Program\Docker"'补充说明
在极少数情况下,如果你之前安装过 Docker 并且卸载不干净,可能还会遇到其他残留文件的问题。如果上面的方法没有解决,可以再尝试重启电脑,或者在管理员模式下运行以下命令,进行更彻底的清理后再重试:
五、进阶:Docker 与 Kubernetes 集成
安装 Docker Desktop 后,可以直接在设置中启用内置的 Kubernetes 集群。这对于学习 K8s 或进行本地容器编排测试非常方便。进入 Settings → Kubernetes ,勾选“Enable Kubernetes”,等待自动部署。
建议: 如果使用 Kubernetes,建议将镜像存储路径迁移到非系统盘,因为 K8s 会下载大量镜像。同时,定期使用 docker system prune 清理未使用的资源。
[AFFILIATE_SLOT_2]
总结
通过本文的步骤,你已成功完成 Docker Desktop 的 自定义安装路径 和 镜像存储迁移 ,并解决了新版本的安全校验错误。记住三个关键点: 管理员权限运行 、 WSL2 启用 、 路径迁移到非系统盘 。现在,你可以更高效地进行容器化开发和容器编排实践了。
-Force -Recurse
bash
# 清理其他可能的相关目录
Remove-Item "C:\ProgramData\Docker" -Force -Recurse -ErrorAction SilentlyContinue
Remove-Item "C:\Program Files\Docker" -Force -Recurse -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.docker" -Force -Recurse -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Docker" -Force -Recurse -ErrorAction SilentlyContinueLinux上安装
下面介绍离线安装Docker CE,目前的发行版基本上都可以使用安装工具一键安装了。
安装
离线包https://download.docker.com/linux/static/stable/x86_64/
shell
#.1.Confirm the os is centos 7.x
# cat /etc/redhat-release && uname -r
echo -e "\033[32m[Note] Apply for Centos 7.x, Ubuntu 20.x, Kylin v10.\033[0m"
#.2.Enable-ip-forward
sudo sed -i 's/^net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo cat /etc/sysctl.conf | grep "^net.ipv4.ip_forward" > /dev/null || echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo /sbin/sysctl -p /etc/sysctl.conf
#.3.offline-setup-docker-ce 下面的下载地址可自行调整
sudo curl -L http://iso.sqlfans.cn/docker/docker-24.0.1.tgz -o /opt/docker-24.0.1.tgz
sudo curl -s -L http://iso.sqlfans.cn/docker/docker.service -o /opt/docker.service
sudo tar -xvf /opt/docker-24.0.1.tgz --directory=/opt/
sudo mv /opt/docker/* /usr/bin/
sudo mv /opt/docker.service /etc/systemd/system/
sudo rm -rf /opt/docker
sudo chmod +x /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl is-active docker
#.4.set-on-start
sudo systemctl enable docker
sudo systemctl is-enabled docker清除上面的痕迹
shell
systemctl stop docker
systemctl disable docker.service
rm -rf /opt/{docker,docker.service}
rm -f /etc/systemd/system/docker.service
rm -f /usr/bin/{docker*,containerd*,ctr,runc}docker-compose与docker的版本支持情况可查看 https://docs.docker.com/compose/releases/release-notes
docker-compose发行包地址https://github.com/docker/compose/releases/
bash
#授予执行权限
chmod +x docker-compose-linux-x86_64
# 移动并命名 docker-compose文件
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
# 验证
docker-compose -v修改docker默认根目录
bash
sudo mkdir -p /data/docker/lib
sudo systemctl stop docker
sudo rsync -avz /var/lib/docker/ /data/docker/lib
sudo mv /var/lib/docker /var/lib/docker.delete
echo '{"data-root":"/data/docker/lib"}' > /etc/docker/daemon.json
sudo systemctl restart docker
sudo docker info | grep Root
#.执行 docker info 若返回 Docker Root Dir: /data/docker/lib 则表示docker根目录修改成功设置国内镜像
shell
vi /etc/docker/daemon.jsonjson
{
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}shell
sudo systemctl daemon-reload
sudo systemctl restart docker设置代理
设置docker网络代理
shell
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf添加内容
shell
[Service]
Environment="HTTP_PROXY=127.0.0.1:8080"
Environment="HTTPS_PROXY=127.0.0.1:8080"
Environment="NO_PROXY=localhost,127.0.0.1"shell
sudo systemctl daemon-reload
sudo systemctl restart docker检查
shell
docker info | grep -i proxy如果有打印代理信息说明生效
当然,直接设置系统代理也可 首先,确认你在系统中正确配置了代理。例如,在 Linux 上,你可以在 ~/.bashrc 或 ~/.bash_profile 中设置代理,在末尾添加
shell
export HTTP_PROXY=127.0.0.1:8080
export HTTPS_PROXY=127.0.0.1:8080
export NO_PROXY=localhost,127.0.0.1centos卸载docker的参考
用于卸载yum安装的docker
shell
#如果是运行状态则停掉
systemctl stop docker
#2、查看yum安装的docker文件包
yum list installed |grep docker
rpm -qa |grep docker
rpm -qa |grep container
# 3、删除所有安装的docker文件包
#下面只是删除一个,上面3个命令列出的所有包都删除。删除后再执行上面的3个命令检查下是否还有包
yum -y remove docker.x86_64
#4、删除docker的镜像文件,默认在/var/lib/docker目录下
rm -rf /var/lib/docker