背景
在CentOS中安装了Docker,默认Docker Root目录是/var/lib/docker。但是该目录磁盘空间很有限,后期很容易导致系统盘满了,所以考虑迁移到更大磁盘目录下,比如下面的/fsc目录下。
解决
在Docker官方文档https://docs.docker.com/config/daemon/#daemon-data-directory中写了关于数据目录的信息:
Docker deamon会把所有数据持久化到一个目录里面,包括容器、镜像、volume、服务定义和秘钥
Linux默认目录是/var/lib/docker,Windows默认目录是C:\ProgramData\docker
修改数据目录可以使用data-root选项
基于如下的官方描述,进行数据目录的修改:
第1步:停止docker服务
systemctl stop docker
第2步:迁移源目录到新目录
源目录:/var/lib/docker
新目录:/fsc/docker
mv /var/lib/docker /fsc/
移动后的效果:
第3步:修改docker配置文件
Linux下找到/etc/docker/daemon.json进行编辑(如果没有就创建):添加data-root即可,其它原有配置不动
{
"data-root": "/fsc/docker"
}
Windows下是C:\ProgramData\docker\config\daemon.json,修改方式同上。
注意:如果之前容器有使用-v参数,请务必修改下容器的config.v2.json文件,替换掉原有/var/lib/docker路径。否则,容器会启动失败哦。可以看下文章后面《遇到的问题》这一节。
第4步:启动docker服务
systemctl start docker
第5步:验证是否修改成功
查看 Docker Root Dir
直接执行docker info命令,即可看到Docker Root Dir: /fsc/docker
docker info
[root@localhost xxx]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
scan: Docker Scan (Docker Inc., v0.23.0)
Server:
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 2
Server Version: 20.10.22
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 5b842e528e99d4d4c1686467debf2bd4b88ecd86
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1160.81.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 16
Total Memory: 62.76GiB
Name: localhost.localdomain
ID: MGFS:BHRO:PFDT:YEVK:V5E7:N4EQ:BWRZ:HOM3:2IZC:4CIF:LM2N:DOLR
Docker Root Dir: /fsc/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
查看docker启动日志
启动成功,状态正常,没有错误日志:
遇到的问题
容器启动报错:evaluating symlinks from mount source
报错信息
执行systemctl staus docker -l,结果如下:
可以看到有个container启动失败,报错信息为:
Jan 13 13:16:45 localhost.localdomain dockerd[10481]: time="2023-01-13T13:16:45.049206934+08:00" level=error msg="2949817e1ace517b84a9b4f65b26e32309c9b27924b81f51cd48c97b4daecaf0 cleanup: failed to delete container from containerd: no such container"
Jan 13 13:16:45 localhost.localdomain dockerd[10481]: time="2023-01-13T13:16:45.049272981+08:00" level=error msg="failed to start container" container=2949817e1ace517b84a9b4f65b26e32309c9b27924b81f51cd48c97b4daecaf0 error=" error evaluating symlinks from mount source \"/var/lib/docker/volumes/portainer_data/_data\": lstat /var/lib/docker: no such file or directory"
这个容器是portainer,当时运行容器时加了-v参数(-v portainer_data:/data)。
解决
在新目录下找到这个容器目录:/fsc/docker/containers/2949817e1ace517b84a9b4f65b26e32309c9b27924b81f51cd48c97b4daecaf0
/fsc/docker是新的存储目录
containers表示容器目录
2949817e1ace517b84a9b4f65b26e32309c9b27924b81f51cd48c97b4daecaf0是具体容器
在这个目录下有个config.v2.json:
搜索config.v2.json发现有两处:
1、挂载的volume
2、日志路径
可以通过如下命令进行修改(记得先备份下):
# 扫描新目录下的所有容器,将/var/lib/docker换成/fsc/docker
sed 's%/var/lib/docker%/fsc/docker%g' /fsc/docker/containers/*/config.v2.json
修改后,重启systemctl restart docker,然后查看日志:运行正常。
参考
1.[Docker存储目录迁移](https://www.cnblogs.com/seaskyccl/articles/16424212.html)
2.[Docker安装目录迁移](https://blog.csdn.net/m0_67403272/article/details/126643533)
3.[官方:Docker deamon.json配置文件](https://docs.docker.com/config/daemon/)
4.[Error starting container after moving docker root directory](https://forums.docker.com/t/error-starting-container-after-moving-docker-root-directory/64324)