Centos: 迁移 Docker 容器存储位置

遇到问题

近来,团队协作中,越来越多的使用 Docker,无论是环境统一还是工具共享~ 但是,随着使用的频率越来越高,遇到的问题也越来越多,今天要说的是如果在云服务器中,安装 Docker 时没有主动对 Dcoker 配置做过修改时,那么,总有一天会遇到系统盘点用过高的情况。如:

1
2
3
4
5
6
7
8
9
10
[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 9.3G 38G 20% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 24K 3.9G 1% /dev/shm
tmpfs 3.9G 2.4M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vdb1 200G 117G 84G 59% /data
tmpfs 783M 0 783M 0% /run/user/0
tmpfs 783M 0 783M 0% /run/user/2004

解决问题

坑 1

当我们使用 docker info 时会看到如下信息:

1
2
3
4
[root@test ~]# docker info
...
Docker Root Dir: /data/docker/docker-root-dir
...

这是我我认为处理完就可以的位置,按照官方文档处理如下:

1
2
3
4
5
6
7
8
9
# vim /etc/docker/daemon.json
{
...
"graph": "/data/docker/root"
...
}

# systemctl daemon-reload
# systemctl restart docker

再次使用 docker info 查看时,很好你会发现 Docker Root Dir 已经被修改了,但是当我回去准备拷贝文件时,发现 docker root 下并没有大文件。

坑 2

重新查看硬盘占用情况:

1
# du -hs /*
会发现 /var/lib/docker 位置占用巨大,会发现 dockerd 命令有参数可用,并且官网也会告诉你 /etc/docker/daemon.json 可修改
1
2
3
{
"data-root": "/data/docker/lib"
}
但是重启 docker 后,发现并不会生效。

坑 3

修改上述 daemon.json 未生效后,于是就想还有哪里可能影响呢,我的理解是我们是通过 systemctl 启动的 docker 服务,于是就找到了 /usr/lib/systemd/system/docker.service 文件,里面确实包含了 dockerd 启动命令:

1
2
3
4
5
6
7
8
9
10
[Service]
Type=notify
# 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
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
然而增加 data-root 参数后依旧无效。

解决

因为 dockerd 确实有命令修改,所以我们查看进程启动,也确实是 dockerd 参数指定了 data root.

1
2
[root@test ~]# ps aux | grep dockerd
root 1026 0.8 0.9 909240 77008 ? Ssl 2019 399:56 /usr/bin/dockerd --data-root=/var/lib/docker --log-opt max-size=50m --log-opt max-file=5 --iptables=false --dns 10.233.0.3 --dns 127.0.0.1 --dns 10.3.9.132 --dns-search default.svc.cluster.local --dns-search svc.cluster.local --dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2

其实 docker.service 目录下还存在一个 options 目录: /etc/systemd/system/docker.service.d/docker-options.conf

修改如下:

1
2
3
4
[Service]
Environment="DOCKER_OPTS= --data-root=/data/docker/lib --log-opt max-size=50m --log-opt max-file=5 --iptables=false \
--log-opt max-size=50m --log-opt max-file=5 \
"

到此,修改完成,如果需求老数据,则 copy 一下,应该是可行的。


Centos: 迁移 Docker 容器存储位置
https://blog.isnap.cn/posts/88fde648/
作者
三岁于辛
发布于
2020年1月12日
许可协议