一文详解如何更改Docker镜像存储路径

 更新时间:2025年08月07日 09:21:59   作者:万事可爱^  
在Docker中,默认情况下镜像的存储路径是在C盘,然而,随着时间的推移,您可能会发现这个默认路径占用了大量的磁盘空间,这篇文章主要介绍了如何更改Docker镜像存储路径的相关资料,需要的朋友可以参考下

背景与痛点

Docker Desktop默认将镜像存储在C盘的C:\Users\<用户名>\AppData\Local\Docker\wsl\data路径下。随着镜像和容器数量增加,C盘空间可能迅速被占满。本文将通过WSL实例迁移高级挂载策略两种方案,教你安全高效地迁移存储路径。

方案一:WSL实例迁移法(推荐)

适用场景:希望彻底改变存储位置,适用于所有Windows版本。

一、能找到 docker-desktop-data 时

1. 确认当前存储路径

  • 打开Docker Desktop → SettingsResourcesAdvanced

  • 记录当前路径(如C:\Users\admin\AppData\Local\Docker\wsl

  • 进入资源管理器,查看data文件夹大小(通常几十GB)

2. 停止Docker服务

首先需要关闭Docker Desktop应用,然后打开 PowerShell 输入wsl --list -v查看查看WSL中的运行的实例是否停止,一般情况下关闭Docker Desktop应用,WSL中的运行的实例也会跟着停止,如下所示:

如果没有正确停止state会显示为running,这是我们则需要输入如下命令停止实例

# 关闭Docker Desktop应用
taskkill /f /im Docker.exe

# 终止WSL实例
wsl --shutdown

停止之后再次输入wsl --list -v查看进程是否被正确关闭。

3. 导出WSL实例

# 创建备份目录(建议非系统盘,我这里选的是D盘)
mkdir D:\docker\backup

# 导出实例(耗时取决于数据量)
wsl --export docker-desktop-data D:\docker\backup\docker-desktop-data.tar

4. 注销原有实例

wsl --unregister docker-desktop-data

5. 导入到新位置

# 创建目标目录
mkdir D:\docker\data

# 导入实例(必须指定--version 2)
wsl --import docker-desktop-data D:\docker\data D:\docker\backup\docker-desktop-data.tar --version 2
  • docker-desktop-data 为要导入的实例的名称,不可修改
  • D:docker\data 新的位置要导入的文件夹
  • D:docker\docker-desktop-data.tar 之前导出备份的实例

6. 验证迁移结果

# 检查WSL实例状态
wsl --list -v

# 启动Docker Desktop
# 进入设置查看存储路径是否变为D:\docker\data

二、找不到 docker-desktop-data 时

在某些系统进行 wsl 实例导出时系统可能会提示不存在具有所提供名称的分发,如下所示:

当通过 wsl --export 命令操作 docker - desktop - data 分发报 WSL_E_DISTRO_NOT_FOUND 错误,说明系统里 WSL 未识别到名为 docker - desktop - data 的分发,但找到了 docker_data.vhdx 文件时,可按以下思路处理来调整 Docker 数据存储路径,本质是绕开 WSL 分发名称问题,直接迁移虚拟磁盘文件:

优先通过 Docker Desktop 内置功能迁移数据(Settings → Resources → Advanced → Disk image location),而非手动复制 VHDX,减少兼容性问题。如果不行,可以用以下方法

1.确定 docker_data.vhdx 存储位置

还是在这个界面我们找到下面这个位置,复制到C盘查找 docker_data.vhdx

一般在这个路径下面(不同安装配置可能有差异,以实际找到的路径为准 ):

C:\Users\DELL\AppData\Local\Docker\wsl\disk

2.停止 Docker 及 WSL 相关服务

  1. 完全退出 Docker Desktop 应用(右键任务栏 Docker 图标,选择“退出” )。
  2. 打开 PowerShell(以管理员身份运行 ),执行 wsl --shutdown ,关闭所有 WSL 实例,确保后续操作时虚拟磁盘文件未被占用。

3.复制/移动到新路径

docker_data.vhdx 文件复制(或剪切,建议先复制做备份 )到你期望的新存储路径,比如 D:\docker\data\docker_data.vhdx ,这一步可能耗时较久,具体按你本身的数据量,且不会返回结果,如需验证是否成功,打开文件夹找到你所创建的文件,看里面是否已经迁移有 docker_data.vhdx

  • 若选择剪切(移动),执行命令(在 PowerShell 中 ):
    Move-Item -Path "C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\docker_data.vhdx" -Destination "D:\docker\data\docker_data.vhdx"
    
  • 若选择复制,执行(在 PowerShell 中 ):
    Copy-Item -Path "C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\docker_data.vhdx" -Destination "D:\docker\data\docker_data.vhdx"
    

4.重新配置 Docker Desktop 指向新路径

Docker Desktop 本身不直接支持通过图形界面“指定虚拟磁盘路径”,但可通过修改 WSL 分发的配置来关联新路径的 docker_data.vhdx

(1). 创建新的 WSL 分发(关联新虚拟磁盘 )

在 PowerShell 中执行以下命令,创建一个新的 WSL 分发,并让它使用你迁移后的 docker_data.vhdx 文件:

wsl --import docker-desktop-data "D:\docker\data" "D:\docker\data\docker_data.vhdx" --version 2 --vhd
  • docker-desktop-data:是新创建的 WSL 分发名称,尽量与 Docker 预期的名称保持一致,方便识别;
  • "D:\docker\data":是新的存储路径(即 docker_data.vhdx 所在的文件夹 );
  • "D:\docker\data\docker_data.vhdx":是迁移后的虚拟磁盘文件路径;
  • --version 2:指定使用 WSL 2 版本,必须添加,否则 Docker 可能无法正常工作。

(2). 验证 WSL 分发

执行 wsl --list -v ,查看是否出现 docker-desktop-data 分发,且状态为 Stopped ,路径为你设置的 D:\docker\data

5.重启 Docker Desktop 并验证

  1. 重新打开 Docker Desktop ,等待其自动初始化。
  2. 启动后,可通过以下方式验证:
    • 查看 Docker 界面,尝试启动容器、拉取镜像,确认功能正常;
    • 检查新存储路径(D:\docker\data ),后续 Docker 相关数据会写入该目录,原 C 盘路径不再增大;
    • 再次执行 wsl --list -v ,确认 docker-desktop-data 分发状态正常(运行 Docker 时可能会变为 Running ,停止 Docker 后会回到 Stopped )。

6.清理旧数据(可选)

若迁移成功,且 Docker 工作正常,可删除原路径(C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data )下的旧 docker_data.vhdx 文件(若之前是剪切迁移则无需此步骤 ),释放 C 盘空间。

关键说明

  • 整个过程的核心是利用 WSL 的 --import 功能,手动创建关联新虚拟磁盘的分发,让 Docker Desktop 能识别并使用新路径的存储。
  • 操作前务必备份好 docker_data.vhdx 文件,若迁移过程中文件损坏,可能导致 Docker 数据丢失(比如镜像、容器配置等 )。
  • 不同 Docker 版本、WSL 环境可能有细微差异,若遇到问题,可通过重新执行 wsl --import 命令调整,或尝试卸载重装 Docker Desktop(需提前备份重要数据 )。

这样就绕开了 WSL 分发名称找不到的问题,通过直接迁移虚拟磁盘文件并重新关联,实现了更改 Docker 数据存储路径的目的。

方案二:挂载卷映射法(高级)

适用场景:希望保留原有实例,仅修改存储路径。

1. 创建符号链接(Windows)

# 以管理员身份运行PowerShell
New-Item -ItemType SymbolicLink -Path "C:\Users\admin\AppData\Local\Docker\wsl\data" -Target "D:\docker\data"

2. 挂载目录到WSL(Linux)

# 进入WSL终端
sudo mkdir /mnt/docker/data
sudo mount --bind /mnt/wsl/docker-desktop-data /mnt/docker/data

3. 配置自动挂载(可选)

# 编辑fstab文件
sudo nano /etc/fstab

# 添加以下行
/mnt/wsl/docker-desktop-data /mnt/docker/data none bind 0 0

关键注意事项

  1. 备份策略

    • 迁移前务必备份docker-desktop-data.tar
    • 定期使用docker system prune -a清理无效镜像
  2. 权限问题

    • 导出/导入命令需管理员权限
    • 确保目标目录权限为777(WSL中)
  3. 性能优化

    • 优先选择SSD作为存储盘
    • 调整WSL资源分配(内存/CPU)

验证与调试

  1. 镜像完整性检查

    docker images
    # 确认所有镜像存在
    
  2. 容器启动测试

    docker run -d --name test nginx
    docker ps
    # 检查容器状态为Up
    
  3. 空间释放验证

    # 在资源管理器查看C盘空间变化
    

官方资源

总结

通过本文的两种方案,你可以安全地将Docker镜像存储从C盘迁移到其他磁盘。WSL迁移法适合彻底改变存储位置,而挂载卷法适合灵活调整。建议定期清理无效镜像,并为WSL分配足够资源以确保性能。在生产环境中,结合备份策略和监控工具(如Portainer)可进一步提升稳定性。

常见问题解答

  • Q:迁移后Docker无法启动?
    A:检查WSL实例状态,重新导入备份
  • Q:镜像文件仍占用C盘空间?
    A:删除旧实例残留文件(C:\Users\<用户名>\AppData\Local\Docker
  • Q:WSL导出失败?
    A:确保目标磁盘有足够空间,以管理员身份运行命令

通过迁移存储路径管理,你可以充分释放C盘空间,让Docker服务运行得更高效稳定。

到此这篇关于如何更改Docker镜像存储路径的文章就介绍到这了,更多相关Docker镜像存储路径更改内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker搭建jenkins服务的示例

    docker搭建jenkins服务的示例

    这篇文章主要介绍了docker搭建jenkins服务的示例,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下
    2020-09-09
  • 如何解决docker容器访问不了外部网络问题

    如何解决docker容器访问不了外部网络问题

    介绍了Docker bridge网络的工作原理,包括虚拟网桥的创建、容器的IP地址分配、IP转发的作用以及NAT的配置,通过配置IP转发和NAT规则,Docker能够实现容器与外部网络之间的通信,文章还提供了解决某个具体问题的步骤
    2024-11-11
  • Docker的四种网络模式

    Docker的四种网络模式

    这篇文章介绍了Docker的四种网络模式,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 基于Docker搭建Redis一主两从三哨兵的实现

    基于Docker搭建Redis一主两从三哨兵的实现

    这篇文章主要介绍了基于Docker搭建Redis一主两从三哨兵的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Docker开启远程访问的实现方式

    Docker开启远程访问的实现方式

    这篇文章主要介绍了Docker开启远程访问的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Centos7下安装与卸载docker应用容器引擎的方法

    Centos7下安装与卸载docker应用容器引擎的方法

    这篇文章主要介绍了Centos7下安装与卸载docker应用容器引擎的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Docker容器实战之镜像与容器的工作原理

    Docker容器实战之镜像与容器的工作原理

    这篇文章主要介绍了Docker容器实战之镜像与容器,关于镜像与容器的工作原理,下面文章将详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Docker常用命令与小技巧汇总

    Docker常用命令与小技巧汇总

    这篇文章主要给大家介绍了关于Docker常用命令与小技巧的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 利用Dockerfile优化Nestjs构建镜像大小详情

    利用Dockerfile优化Nestjs构建镜像大小详情

    这篇文章主要介绍了利用Dockerfile优化Nestjs构建镜像大小详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Docker如何给Springboot项目动态传参的实现方法

    Docker如何给Springboot项目动态传参的实现方法

    这篇文章主要介绍了Docker如何给Springboot项目动态传参的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论