docker的默认路径位于 /var 中,但往往 /var 路径的容量并不大,一旦docker的镜像、层等稍等大一些,便有把 /var 写满的风险。
本文给出一种迁移docker默认路径的方法.
修改配置文件
假设新的docker目录我们设置为/home/docker, 注意:该目录不能是NFS挂进来的,否则docker将无法启动。
修改前我们先备份一下:
panjie@debian-docker-pro:/lib/systemd/system$ sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
修改/lib/systemd/system/docker.service 中的ExecStart=/usr/bin/dockerd -H fd://...
为ExecStart=/usr/bin/dockerd -g /home/docker -H fd://
以下是对比信息;
panjie@debian-docker-pro:/home$ diff -uP -N /lib/systemd/system/docker.service.bak /lib/systemd/system/docker.service
--- /lib/systemd/system/docker.service.bak 2023-01-11 16:00:45.071017829 +0800
+++ /lib/systemd/system/docker.service 2023-01-11 16:03:42.330635006 +0800
@@ -10,7 +10,7 @@
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
-ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
+ExecStart=/usr/bin/dockerd -g /home/docker -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
停止服务
停止所有的正在运行的docker容器后,我们开始停止docker服务
$ sudo systemctl stop docker
此时我们将得到了配置文件已经变更的提醒,然后执行使配置生效
$ sudo systemctl daemon-reload
同步数据
接下来我们同步原文件夹中的数据
$ sudo rsync -aqxP /var/lib/docker/ /home/docker
重启服务
最后重启服务,并重启相关的docker容器
$ sudo systemctl enable docker
参考:https://gist.github.com/nileshsimaria/ec2ea6847d494d2a1935c95d7c4b7155