Docker Desktop自定义安装目录与镜像保存路径
前言
Docker在Windows上的默认安装路径为C:\Program Files\Docker,并且在安装过程中无法指定安装目录,镜像和容器数据通常存储在 C:\ProgramData\Docker。
一般安装软件需要安装到其他盘、减少C盘的占用,此时需要通过类似于Linux系统创建软链接的方式将路径C:\Program Files\Docker映射到其他盘。
在安装时是无法选择Docker的存储目录和安装路径的,点击Docker Desktop Installer.exe只会显示如下界面,点击OK之后就安装到C盘上去了,光Docker程序本身就占了2GB空间,加上镜像和容器可能会占用更多存储空间,所以要把它安装和存储镜像容器到别的盘上,
wsl安装
- 打开 PowerShell 或命令提示符(以管理员身份运行),输入以下命令来启用 WSL 功能:
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
- 输入以下命令来启用虚拟机平台:
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
- 重启电脑,再次管理员打开命令窗口,输入下面的命令,可能会有点慢 ,长时间没反应就回车一下,刷新显示
1 | wsl --install -d Ubuntu |
- 安装完成,输入密码的时候不会显示,自己把握好。
安装docker
修改Docker安装目录
1.打开win+R打开运行窗口,输入cmd,同时按下快捷键CTRL+SHIFT+Enter即可以管理员身份打开
Windows自带的cmd命令行
注意:需要保证以管理员身份打开命令行,否则执行创建软链接命令时会提示拒绝访问。,无法创建成功。
1 | mklink /j "C:\Program Files\Docker" "E:\Docker" |
镜像存储路径配置(这个方法不行)
出现报错**”connect ENOENT \.\pipe\dockerBackendApiServer”**,这是一个常见的 Docker Desktop 错误,通常与管道通信问题或 Docker Desktop 后台服务未正确运行有关。最后还是没能修改
软链接问题
使用软链接注意事项:在创建符号链接或联接时,必须使用管理员权限运行命令提示符,否则会提示权限不足。
安装docker之前C盘的存储空间为404GB,安装之后也是404GB,而安装docker程序所需的存储空间为2GB,说明了docker程序没有安装在C盘上,而是通过软链接安装在了E:\Docker。
疑惑
在C盘的C:\Program Files\Docker文件夹下也能看到docker的安装文件,而且还能正常点开和运行,地址栏的URL也是C盘的而不是跳转到E盘,我还以为docker重复安装在了两个位置,其实没有重复安装,而是在C盘上显示的一种错觉,实际上程序还是在E盘上
用了软链接(mklink /j)后,两个目录的内容实际上是共享的。软链接的本质是创建一个指向原始位置的引用,而不是复制文件,因此在查看属性时,系统可能会错误地计算这两个位置的大小,导致它们看起来各自占用了2GB的空间。
使用 mklink /j 创建了一个目录联接,它会让 Windows 将所有对 C:\Program Files\Docker 的访问重定向到 E:\Docker。这样,C:\Program Files\Docker 实际上不再占用额外的磁盘空间。
还能通过创建文件夹的方式检验是否能够成功链接,例如C:\Program Files\Docker创建了 一个新的文件夹test,打开E:\Docker发现test文件夹也在。当我在E:\Docker删除了test文件夹,C:\Program Files\Docker中的test文件夹也消失了
软链接补充知识
硬链接(Hard Link)
作用:
为一个文件创建多个引用,多个引用指向相同的文件内容。像同一本书的多个目录入口,它们都指向同一内容。如果其中一个目录入口被删除,其他入口仍然可以访问那本书的内容。硬链接与目标文件共享同一块数据。硬链接和原始文件之间没有区别,都指向磁盘中的相同数据块。删除任意一个链接或原始文件,数据不会丢失,直到所有链接都删除时,数据才会从磁盘中释放。
特点:
只能在同一卷中创建(不能跨磁盘)。
硬链接和原始文件共享同一内容,即使删除了其中一个链接,文件内容仍然存在。
效果:
下面示例展示了通过 C:\backup\report_link.txt 和 C:\data\report.txt 访问同一个文件内容。
无论在 report.txt 还是 report_link.txt 中修改内容,两者都会同步更新,因为它们指向同一块磁盘数据。
如果删除了 report.txt,report_link.txt 依然存在,文件内容不会丢失
1 | # 示例 |
软链接/Symbolic Link
作用:
软链接像一个指针,可以指向文件或目录,支持跨卷操作指向另一个文件或文件夹的位置。如果目标文件或文件夹被删除或移动,软链接会失效(就像坏掉的快捷方式)。
效果:
在 D:\project\data 中有一个数据文件夹,但希望在 C:\work 中也能访问这个文件夹,而不复制它。做了下面这一步之后,可以从 C:\work\data_link 访问 D:\project\data 文件夹中的所有内容,如果在 C:\work\data_link 中创建、修改或删除文件,D:\project\data 中会同步变化。如果删除了 D:\project\data 目录,C:\work\data_link 会指向一个不存在的位置,访问时会出错。
1 | mklink /D "C:\work\data_link" "D:\project\data" |
二者的区别
目录联接(Junction)
本次方法采用的就是目录链接,和软链接非常像。它是一种特殊的链接类型,只能用于目录之间的映射。它允许将一个目录的路径映射到另一个位置,但不支持文件的映射。当想将某个程序或文件夹的路径重定向到另一个磁盘(比如把 C:\Program Files 下的文件重定向到 D 盘),但不想改变原路径时,目录联接非常有用。
1 | # 这会将 C:\Program Files\Docker 变成一个指向 E:\Docker 的目录联接。 |
mklink 命令的详细用法
1 | mklink [选项] <链接路径> <目标路径> |
常用选项:
- **
/D**:创建一个指向目录的符号链接。 - **
/J**:创建目录联接(Junction)。 - **
/H**:创建文件的硬链接。 - (无选项):默认创建文件的符号链接。












