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


潘杰
3.1k 声望238 粉丝