Centos: 迁移 Docker 容器存储位置
遇到问题
近来,团队协作中,越来越多的使用 Docker,无论是环境统一还是工具共享~ 但是,随着使用的频率越来越高,遇到的问题也越来越多,今天要说的是如果在云服务器中,安装 Docker 时没有主动对 Dcoker 配置做过修改时,那么,总有一天会遇到系统盘点用过高的情况。如:
1 |
|
解决问题
坑 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 /*
1
2
3{
"data-root": "/data/docker/lib"
}
坑 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
解决
因为 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 一下,应该是可行的。