最近遇到一个问题,服务器的系统盘空间被占满了,导致服务不能正常运行了。
推测是 docker 存储路径默认在系统盘的缘故(老六行为)
前置条件:
源盘和目标盘的文件系统一致,否则会导致一系列数据兼容性问题,需要谨慎迁移,可能导致 MySQL 起不来等各种问题
验证
查看存储路径是否在系统盘
docker info
输出,证实猜想
...
Docker Root Dir: /var/lib/docker
...
迁移并修改配置
0. 停止 Docker 守护进程(可能需要)
systemctl stop docker.socket
2. 停止 Docker 服务:
systemctl stop docker
2.创建一个新的目录,用于存储 Docker 数据。例如,将数据存储在 /home/docker/:
mkdir -p /home/docker/
3.将当前 /var/lib/docker 目录下的所有数据复制到新目录,使用 rsync 替代 cp 解决断点续传问题:
cp -av /var/lib/docker/* /home/docker/
【推荐】rsync -avz /var/lib/docker/* /home/docker/
4.默认情况下,Docker 使用 /etc/docker/daemon.json 配置文件。
vim /etc/docker/daemon.json
5.在 daemon.json 文件中,添加或修改 "data-root" 选项,以指向新的存储路径。例如:
{
"data-root": "/home/docker/"
}
保存并关闭文件。
6.启动 Docker 服务:
systemctl start docker
7.验证:
docker info
df -h
docker ps
或者直接验证一下服务是否可用
8.再删除原目录,稳妥一点,不然第 3 步直接 mv 命令就行了
cd /var/lib
rm -rf docker
可能引发的问题
- MySQL 容器起不来,报错:mysqld: Can’t create/write to file ‘/tmp/ibKWH1Sj’ (Errcode: 13 - Permission denied)
解决方案:在创建文件夹之后,chmod -R 777 /home/docker
方案二:添加软链接
# 1.停止docker服务
$ sudo systemctl stop docker
# 2.开始迁移目录
$ sudo mv /var/lib/docker /data/
# 3.添加软链接
$ sudo ln -s /data/docker /var/lib/docker
# 4.启动docker服务
$ sudo systemctl start docker
参考:
https://blog.csdn.net/lp840312696/article/details/128732320
https://blog.csdn.net/u011197085/article/details/130272195
https://blog.csdn.net/MO_JM/article/details/119053882
https://z.itpub.net/article/detail/14856FDB5114E0A6E1EE1BC50BD2CAF1