0


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

摘要

在进行docker部署的时候经常出现

  1. no space left on device

的错误,这是由于镜像存储文件夹磁盘空间不足引起的,通常需要更换默认的镜像保存文件夹

  1. /var/lib/docker

。在更换过程中,常常会遇到下面这个错误。

  1. Job for docker.service failed because the control process exited with error code.
  2. See "systemctl status docker.service" and "journalctl -xe" for details.

不少用户会因此而困扰。本篇文章将详细记录一下镜像迁移的步骤和可能遇到的问题。

具体步骤

1 输入
  1. docker info

查看docker信息

在这里插入图片描述
这里需要注意两个地方,第一个是

  1. Storage Driver: vfs

,这是有可能出现

  1. 镜像迁移之后,没有原先镜像和容器信息

问题的地方;第二个是

  1. Docker Root Dir

,这里是默认的镜像文件存储位置。

2 关闭docker服务:
  1. sudo systemctl stop docker.service
3 将
  1. /var/lib/docker

里的所有文件拷贝到新的文件夹

  1. /home/user/docker_work/docker

中。

  1. sudo cp -r /var/lib/docker/* /home/user/docker_work/docker

如果出现权限不足的情况,可以利用

  1. sudo chmod -R 777 /var/lib/docker

修改默认存储文件夹权限,再进行拷贝。

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

文件

这个文件docker是不会默认生成的,需要自己在文件夹中新建。文件中填入以下内容:

  1. {
  2. "data-root": "/home/user/docker_work/docker",
  3. }

对于旧的docker版本,需要将

  1. data-root

更换成

  1. graph

;如果是要修改阿里镜像源加速的话也是在这个文件中修改。

5 更新docker配置
  1. sudo docker daemon-reload

重启docker

  1. sudo systemctl restart docker

在这里,如果报错

  1. Job for docker.service failed because the control process exited with error code.
  2. See "systemctl status docker.service" and "journalctl -xe" for details.

说明是

  1. /etc/docker/daemon.json

文件的问题,要仔细检查格式、逗号字符等。

6 检查结果

没有问题之后输入

  1. sudo docker info

能够观察到

  1. Docker Data Dir

已经修改成了

  1. /home/user/docker_work/docker

;
注意观察显示结果中的

  1. Storage Driver

,如果和之前的

  1. Storage Driver

是一致的话,输入

  1. sudo docker images

查看docker镜像,能显示以前的镜像结果,说明镜像迁移成功。但是如果

  1. Storage Driver

的值和之前不一致则不会显示之前镜像的结果,如下所示:
在这里插入图片描述

7 修改Storage Driver
7.1尝试解决

这里我首先参考这个博主的解决方式:修改Docker默认镜像和容器存储位置(超详细!!!)
修改docker配置文件

  1. /etc/systemd/system/multi-user.target.wants/docker.service
  1. 该博主的解决方式:
  2. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改以下内容:
  3. ExecStart=/usr/bin/dockerd --graph=/mnt/docker --storage-driver=overlay

这里还是一样,新版本docker用

  1. data-root

,旧版本用

  1. graph

替换;除此之外,还需要将

  1. overlay

需要修改成与上面

  1. Storage Driver

一致。
保存后运行:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker

如果能够重新运行的话应该没有什么问题,但我这里还是出现了这个报错。

  1. Job for docker.service failed because the control process exited with error code.
  2. See "systemctl status docker.service" and "journalctl -xe" for details.

而且经过检查deamon.json中也不存在格式、符号等方面的问题。

7.2 解决方法

将docker配置文件

  1. /etc/systemd/system/multi-user.target.wants/docker.service

恢复原样,不做修改。
修改

  1. /etc/docker/daemon.json

文件为:

  1. {
  2. "data-root": "/home/user/docker_work/docker",
  3. "storage-driver": "vfs"
  4. }

修改完成后输入:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker

此时

  1. sudo docker info

查看docker信息:
在这里插入图片描述
此时的

  1. Storage Driver

与之前一致,

  1. Docker Root Dir

修改新的存储文件夹,说明修改docker镜像存储位置成功
输入

  1. sudo docker images

查看镜像:
在这里插入图片描述
出现以前的镜像信息,说明迁移镜像文件成功。

8 删除默认镜像

确定镜像没有问题后,可以删除默认存储文件夹中的文件

  1. sudo rm -rf /var/lib/docker/*

总结

本篇文章详细介绍了ubuntu20.04系统上修改docker镜像存储位置,并迁移现有镜像到新的存储文件夹的过程。另外,针对操作过程中遇到的报错信息进行了报错解决。

标签: ubuntu docker

本文转载自: https://blog.csdn.net/givxd/article/details/141196682
版权归原作者 没有先生 所有, 如有侵权,请联系我们删除。

“ubuntu修改docker镜像存储位置,并迁移现有镜像(保姆级教程)”的评论:

还没有评论