摘要
在进行docker部署的时候经常出现no space left on device
的错误,这是由于镜像存储文件夹磁盘空间不足引起的,通常需要更换默认的镜像保存文件夹/var/lib/docker
。在更换过程中,常常会遇到下面这个错误。
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服务:
sudo systemctl stop docker.service
3 将/var/lib/docker
里的所有文件拷贝到新的文件夹/home/user/docker_work/docker
中。
sudo cp -r /var/lib/docker/* /home/user/docker_work/docker
如果出现权限不足的情况,可以利用sudo chmod -R 777 /var/lib/docker
修改默认存储文件夹权限,再进行拷贝。
4 修改/etc/docker/daemon.json
文件
这个文件docker是不会默认生成的,需要自己在文件夹中新建。文件中填入以下内容:
{
"data-root": "/home/ytp-server/docker_work/docker",
}
对于旧的docker版本,需要将data-root
更换成graph
;如果是要修改阿里镜像源加速的话也是在这个文件中修改。
5 更新docker配置
sudo docker daemon-reload
重启docker
sudo systemctl restart docker
在这里,如果报错
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
文件的问题,要仔细检查格式、逗号字符等。
6 检查结果
输入sudo docker info
能够观察到Docker Data Dir
已经修改成了/home/user/docker_work/docker
;
注意观察显示结果中的Storage Driver
,如果和之前的Storage Driver
是一致的话,输入sudo docker images
查看docker镜像,能显示以前的镜像结果,说明镜像迁移成功。但是如果Storage Driver
的值和之前不一致则不会显示之前镜像的结果,如下所示:
7 修改Storage Driver
7.1尝试解决
这里我首先参考这个博主的解决方式:修改Docker默认镜像和容器存储位置(超详细!!!)
修改docker配置文件/etc/systemd/system/multi-user.target.wants/docker.service
该博主的解决方式:
将ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改以下内容:
ExecStart=/usr/bin/dockerd --graph=/mnt/docker --storage-driver=overlay
这里还是一样,新版本docker用data-root
,就版本用graph
,需要将overlay
需要修改成与上面Storage Driver
一致。
保存后运行:
sudo systemctl daemon-reload
sudo systemctl restart docker
如果能够重新运行的话应该没有什么问题,但我这里一样出现了这个报错。
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
7.2 解决方法
将docker配置文件/etc/systemd/system/multi-user.target.wants/docker.service
恢复原样,不做修改。
修改/etc/docker/daemon.json
文件为:
{
"data-root": "/home/ytp-server/docker_work/docker",
"storage-driver": "vfs"
}
修改完成后输入:
sudo systemctl daemon-reload
sudo systemctl restart docker
此时sudo docker info
查看docker信息:
此时的Storage Driver
与之前一致,Docker Root Dir
修改新的存储文件夹,说明修改docker镜像存储位置成功
输入sudo docker images
查看镜像:
出现以前的镜像信息,说明迁移镜像文件成功。
8 删除默认镜像
确定镜像没有问题后,可以删除默认存储文件夹中的文件
sudo rm -rf /var/lib/docker/*
总结
本篇文章详细介绍了ubuntu20.04系统上修改docker镜像存储位置,并迁移现有镜像到新的存储文件夹的过程。另外,针对操作过程中遇到的报错信息进行了报错解决。