解决 docker no space left on device

操作系统为 CentOS Linux release 7.2,试过网上的一些方法例如软链接,增加graph路径都没有用,自己摸索找到了配置路径的位置,记录一下。

  1. 使用df -h 查看磁盘状况:
1
2
3
4
5
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 99G 91G 3.4G 97% /
/dev/vdb1 493G 62G 406G 14% /data
overlay 99G 91G 3.4G 97% /var/lib/docker/overlay2/xxx

可以看到/var/lib/docker/放满了,可以移到data目录下。

同时可以先确认一下目前的 docker 目录:

1
2
3
4
$ docker info
...
Docker Root Dir: /var/lib/docker
...
  1. 清理无用的内容
1
$ docker system prune

可添加-a清除得更彻底。之后查看磁盘状况:

1
2
3
4
5
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 99G 83G 12G 88% /
/dev/vdb1 493G 62G 406G 14% /data
overlay 99G 83G 12G 88% /var/lib/docker/overlay2/xxx

有所缓解,但12G依然不够用,需要更改 docker 目录到 /data下。

  1. 停止docker服务
1
$ systemctl stop docker
  1. 创建新的docker工作目录
1
$ mkdir -p /data/dockerlib
  1. 迁移/var/lib/docker
1
rsync -avz /var/lib/docker /data/dockerlib
  1. 改动配置文件
1
$ vim /etc/docker/daemon.json

在文件中更改

1
"data-root": "/data/dockerlib/docker",
  1. 重启docker服务
1
2
3
4
5
systemctl daemon-reload

systemctl restart docker

systemctl enable docker
  1. 确认是否配置成功
1
2
3
4
$ docker info
...
Docker Root Dir: /data/dockerlib/docker
...
  1. 确认 docker 已经成功转移

修改原 docker 路径名,再进行一些操作

1
2
3
$ mv /var/lib/docker /var/lib/docker_temp
$ docker image list
$ docker container list

在这一步我发现之前的 container 进去会有问题,但是重启后可以重新进入:

1
2
3
$ docker stop xxx
$ docker start xxx
$ docker exec -it xxx /bin/bash

确认无误后可以删除,为了防止出错可以用一阵子再删

1
$ rm -rf /var/lib/docker_temp