摘要
在进行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/user/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.
而且经过检查deamon.json中也不存在格式、符号等方面的问题。
7.2 解决方法
将docker配置文件
/etc/systemd/system/multi-user.target.wants/docker.service
恢复原样,不做修改。
修改
/etc/docker/daemon.json
文件为:
{
"data-root": "/home/user/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镜像存储位置,并迁移现有镜像到新的存储文件夹的过程。另外,针对操作过程中遇到的报错信息进行了报错解决。
版权归原作者 没有先生 所有, 如有侵权,请联系我们删除。