Docker镜像存储路径迁移指南(解决磁盘空间不足问题)

Docker 部署中 no space left on device 错误及镜像迁移指南

在进行 Docker 部署时,经常会出现如下错误:

复制代码
no space left on device

这是由于镜像存储文件夹磁盘空间不足引起的。通常解决方法是更换默认的镜像保存路径 /var/lib/docker。然而,在更换过程中,常常会遇到以下错误:

bash 复制代码
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

不少用户因此而困扰。本文将详细记录镜像迁移的步骤以及可能遇到的问题。

具体步骤

1. 输入 docker info 查看 Docker 信息

有两个关键点需要注意:

  • Storage Driver : 如 vfs,这可能影响迁移后是否能保留原有镜像和容器信息。
  • Docker Root Dir: 默认的镜像文件存储位置。

2. 关闭 Docker 服务

bash 复制代码
sudo systemctl stop docker.service

3. 拷贝现有镜像到新目录

/var/lib/docker 中的所有文件拷贝到新的文件夹(如 /home/user/docker_work/docker):

bash 复制代码
sudo cp -r /var/lib/docker/* /home/user/docker_work/docker

如果出现权限不足的情况,可以先修改原目录权限:

bash 复制代码
sudo chmod -R 777 /var/lib/docker

然后再执行拷贝操作。


4. 修改 /etc/docker/daemon.json

该文件默认不存在,需要手动创建,并填入以下内容:

json 复制代码
{
  "data-root": "/home/user/docker_work/docker"
}

5. 更新 Docker 配置并重启服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

如果出现报错:

bash 复制代码
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

说明是 /etc/docker/daemon.json 文件格式问题,请仔细检查 JSON 格式、逗号等符号


6. 检查迁移结果

运行以下命令确认 Docker 数据目录已经更改:

bash 复制代码
sudo docker info

查看输出中的 Docker Root Dir 是否为新路径 /home/user/docker_work/docker

再运行:

bash 复制代码
sudo docker images

如果能够看到原有镜像,则说明迁移成功。但若 Storage Driver 与之前不一致,则可能无法显示原有镜像。


7. 修改 Storage Driver

7.1 尝试解决

参考其他资料,修改 Docker 配置文件:

bash 复制代码
/etc/systemd/system/multi-user.target.wants/docker.service

将原始内容:

bash 复制代码
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

改为:

bash 复制代码
ExecStart=/usr/bin/dockerd --graph=/mnt/docker --storage-driver=overlay

然后执行:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

但在某些情况下仍然会报错:

bash 复制代码
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

即使检查了 daemon.json 的格式也未发现问题。


7.2 推荐解决方法

恢复 /etc/systemd/system/multi-user.target.wants/docker.service 原样,不做修改。

修改 /etc/docker/daemon.json 内容如下:

json 复制代码
{
  "data-root": "/home/user/docker_work/docker",
  "storage-driver": "vfs"
}

保存后执行:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

再次运行 sudo docker info

  • 确认 Storage Driver 与之前一致;
  • Docker Root Dir 已指向新路径,表示镜像存储位置修改成功;
  • 运行 sudo docker images 能显示原有镜像,表示迁移成功。

8. 删除默认镜像文件夹内容(可选)

确认迁移无误后,可以删除原目录内容以释放空间:

bash 复制代码
sudo rm -rf /var/lib/docker/*

修改前:

修改后

总结

本文详细介绍了在 Ubuntu 20.04 系统上如何修改 Docker 镜像存储位置,并迁移现有镜像到新路径的过程。同时,针对迁移过程中可能出现的报错进行了分析和解决,确保迁移顺利完成。

相关推荐
Wy_编程5 分钟前
docker仓库
docker·容器·eureka
亚空间仓鼠13 分钟前
Docker 容器技术入门与实践 (三):Docker私有仓库
docker·容器·eureka
小陈99cyh20 分钟前
安装NVIDIA Container Toolkit,让gpu容器环境跑通
运维·pytorch·docker·nvidia
青槿吖31 分钟前
告别RestTemplate!Feign让微服务调用像点外卖一样简单
java·开发语言·分布式·spring cloud·微服务·云原生·架构
我是无敌小恐龙41 分钟前
Java SE 零基础入门 Day02 运算符与流程控制超详细笔记
java·数据结构·spring boot·笔记·python·spring·spring cloud
Y学院42 分钟前
企业级Dify私有化部署全攻略(Docker Compose生产环境实战)
人工智能·docker·语言模型
草木红1 小时前
Python 中使用 Docker Compose
开发语言·python·docker·flask
草木红1 小时前
Vue3 + Docker + Nginx 完整部署流程
nginx·docker·容器
逆向爱好者1 小时前
windows环境下通过docker安装使用Superset
windows·docker·容器
耳东哇1 小时前
linuxdocker配置毫秒镜像下载镜像
docker