Docker数据目录迁移

背景

在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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘蓝聊Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值