原因
服务器中部署的软件系统太多,而 Docker 中 overlay2 默认容量太小,当其爆满时导致部署的系统软件无法正常使用。
显示文件系统的磁盘使用情况
# 显示文件系统的磁盘使用情况 df -h
解决方案
overlay2 扩容
overlay2 扩容有2种方案:
1. 迁移/var/lib/docker数据,创建软连接:
这种方法简单快捷,只需要将/var/lib/docker目录中的数据迁移到新的位置,并在原来的位置创建一个符号链接指向新的位置。这样 Docker 仍然会认为数据存储在原来的位置,对Docker本身的操作和配置没有影响,因此相对来说比较安全。
但是,如果有其他程序直接依赖于/var/lib/docker目录,可能会导致一些问题。
2.迁移/var/lib/docker数据,修改 Docker 配置文件:
这种方法需要修改 Docker 的配置文件,将 Docker 的运行路径指定为新的位置,通常需要编辑Docker 的 systemd 配置文件或者 Docker 配置文件来实现。这种方法需要对 Docker 的配置文件进行修改,因此操作相对来说更加复杂,但可以更彻底地改变 Docker 的运行路径。
这种方法对Docker本身的配置和操作有一定影响,如果配置不正确可能会导致 Docker 无法正常启动。
本文使用的是第二种。
一、停止所有容器
# 停止所有容器,避免迁移时影响业务 docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
二、备份 Docker 默认运行目录
cp /var/lib/docker /var/lib/docker-backup -r
三、切换 Docker 默认运行目录
# 通过剪切实现切换 Docker 默认运行目录 mv /var/lib/docker <挂载的目录>
四、修改docker配置文件,添加 “data-root” 路径
# 编辑 Docker 配置文件 vim /etc/docker/daemon.json // 在文件中增加参数 "data-root": "/data/sdb1/docker"
如果不存在daemon.json文件,可以自行创建,注意json格式。
五、重启 Docker 服务
# 重新加载systemd的配置文件,以便systemd可以读取最新的配置。 systemctl daemon-reload # 重启 Docker 服务 systemctl restart docker # 查看 Docker 服务状态 systemctl status docker
六、查看磁盘情况
df -h