docker所在的文件系统空间不足,迁移docker的存储目录到另外较大的磁盘中。

 

首先,查看docker目录:docker info | grep -i "docker root dir"

df -h 发现空间已满,需要迁移docker。

docker迁移

docker所有自身的东西都会存在这些文件夹下面包括镜像文件和容器,所以会占用越来越多的磁盘空间。如果docker所在的磁盘空间比较小,磁盘空间被占满没有空间的时候,显然会导致docker容器运行失败,此时必然要迁移docker的存储目录到一个更大的磁盘下面。

1.查看磁盘占用情况:df -h

2.查看docker自身的内存占用:docker system df

3.docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

4.docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker 镜像。

迁移/var/lib/docker目录。

1.停止docker服务

systemctl stop docker

2.创建新的docker目录,执行命令df -h,找一个大的磁盘。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:

mkdir -p /home/docker/lib

3.迁移/var/lib/docker目录下面的文件到 /home/docker/lib:

(rsync是linux文件夹同步的命令,参数要加一个-r,因为文件夹要递归copy,如果在同一台服务器上面,直接cp也是可以的)

rsync -r -avz /var/lib/docker /home/docker/lib/

4.配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在,就新建。

mkdir -p /etc/systemd/system/docker.service.d/
 
vi /etc/systemd/system/docker.service.d/devicemapper.conf

5.然后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在 /home/docker/lib/docker )

[Service]
 
ExecStart=
 
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker

6.重新加载 docker

systemctl daemon-reload
 
systemctl restart docker
 
systemctl enable docker

7.为了确认一切顺利,运行

docker info

命令检查Docker 的根目录.它将被更改为 /home/docker/lib/docker

...
 
Docker Root Dir: /home/docker/lib/docker
 
Debug Mode (client): false
 
Debug Mode (server): false
 
Registry: https://index.docker.io/v1/
 
...

8.启动成功后,再确认之前的镜像还在:

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
AAA/AAA v2 7331b8651bcc 27 hours ago 3.85GB
BBB/BBB v1 da4a80dd8424 28 hours ago 3.47GB

9.确定容器没问题后删除/var/lib/docker/目录中的文件。