修改 Docker 默认镜像存储路径需停服务后迁移或重配置,主流方法有三:一、daemon.json 配置 data-root(推荐);二、软链接替换 /var/lib/docker;三、systemd service 添加 --data-root 参数;均需确保权限、服务识别与数据一致性。

修改 Docker 默认镜像存储路径,核心是把 /var/lib/docker 这个默认数据目录迁移到空间更充足的位置。主流做法有三种,都需先停服务、再迁移或重配置,最后重启生效。关键不是“改一个地方就行”,而是确保路径权限、服务识别和已有数据处理三者一致。
方法一:用 daemon.json 配置 data-root(推荐)
这是当前 Docker 官方推荐的方式,兼容性好、语义清晰,适用于 Docker 17.05+ 版本。
- 停止 Docker:运行
sudo systemctl stop docker - 创建新目录(比如挂载在大容量盘上):
sudo mkdir -p /mnt/data/docker,并确保属主是root:root,权限为755 - 编辑或新建配置文件:
sudo nano /etc/docker/daemon.json,写入:
- 注意:不要同时存在
graph字段,Docker 会优先使用data-root;如果文件已存在其他配置(如 registry-mirrors),直接合并进去即可 - 保存后执行
sudo systemctl start docker,再用docker info | grep "Docker Root Dir"确认路径已更新
方法二:软链接替换 /var/lib/docker
适合不想改配置、或旧版本 Docker 的场景,本质是“欺骗”Docker 进程去读另一个位置。
- 停服务:
sudo systemctl stop docker - 把原数据整体移走:
sudo mv /var/lib/docker /mnt/data/docker(确保目标盘有足够空间) - 创建软链接:
sudo ln -sf /mnt/data/docker /var/lib/docker - 启动服务:
sudo systemctl start docker - 验证:
ls -l /var/lib/docker应显示指向新路径;docker info中的路径也会同步更新
⚠️ 注意:软链接方式下,Docker 启动时仍会检查 /var/lib/docker 是否可写,所以链接目标目录的权限和 SELinux 上下文(如启用)需一并处理。
方法三:通过 systemd service 修改启动参数(CentOS/RHEL 7+)
适用于无法写 daemon.json 或需要精细控制守护进程参数的环境。
- 停服务:
sudo systemctl stop docker - 编辑 service 文件:
sudo nano /usr/lib/systemd/system/docker.service - 找到
ExecStart=行,在其后添加--data-root=/mnt/data/docker(Docker 20.10+ 推荐用--data-root,旧版可用--graph) - 重载配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start docker
? 提示:修改 service 文件后,每次 Docker 升级可能被覆盖,建议配合 systemctl edit docker 创建 drop-in 文件更稳妥。
迁移已有镜像和容器的注意事项
无论哪种方式,新路径初始为空。原有镜像、容器、卷等不会自动迁移。
- 如果希望保留历史数据,可在停服务后,用
rsync -avz /var/lib/docker/ /mnt/data/docker/全量复制(比cp更可靠) - 复制完成后,再执行对应方法中的链接或配置步骤
- 启动后运行
docker images和docker ps -a检查是否正常列出 - 不迁移也可,但等于“重装”,所有本地镜像需重新拉取或 load


















