ubuntu修改docker镜像存储位置,并迁移现有镜像(保姆级教程)

摘要

在进行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镜像存储位置,并迁移现有镜像到新的存储文件夹的过程。另外,针对操作过程中遇到的报错信息进行了报错解决。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
修改Docker镜像存储位置,可以按照以下步骤进行操作: 1. 首先,确认你要将镜像存储位置更改为哪个挂载点。假设你将镜像存储位置更改为新挂载点 `/data/`。 2. 创建一个新的目录来存储镜像。使用以下命令在新挂载点上创建目录: ``` mkdir -p /data/var/lib/docker/ ``` 3. 将原有的Docker容器和镜像拷贝到新的存储位置。使用以下命令进行拷贝: ``` cd /data/var/lib/docker/ cp -r /var/lib/docker/* /data/var/lib/docker/ ``` 4. 修改Docker的服务配置文件。使用编辑器打开`docker.service`文件: ``` vim /usr/lib/systemd/system/docker.service ``` 5. 在`ExecStart`行的末尾添加参数`--graph /data/var/lib/docker`,以设置新的存储路径。修改后的行应该类似于: ``` ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph /data/var/lib/docker ``` 6. 保存文件并退出编辑器。 7. 重新加载Docker服务配置: ``` systemctl daemon-reload ``` 8. 重启Docker服务以使更改生效: ``` systemctl restart docker ``` 现在,Docker镜像存储位置已经成功修改为新挂载点 `/data/`。请确保在操作过程中仔细检查命令,以避免错误。引用 [2 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker----如何更改docker镜像存储路径](https://blog.csdn.net/redrose2100/article/details/130073174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [修改docker默认存储路径方法总结](https://blog.csdn.net/m0_58684193/article/details/127554527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值