Docker数据目录迁移解决方案

简介: 在docker的使用中随着下载镜像越来越多,构建镜像、运行容器越来越多, 数据目录必然会逐渐增大;当所有docker镜像、容器对磁盘的使用达到上限时,就需要对数据目录进行迁移。

如何避免:

1.在安装前对/var/lib/docker(docker默认数据存储目录)目录进行扩容;
2.在docker安装完成后,修改docker默认存储位置为磁盘容量较大的位置;规避迁移数据过程中造成的风险。

前置工作

  1. 在迁移前确认迁移的目标目录空间是否充足
  2. 在迁移时需停止docker服务,务必在平台不使用时进行迁移

使用以下命令查询当前docker数据目录安装路径:

docker info | grep "Docker Root Dir"

下文以 /home/rain/docker 这个路径作为要迁移的新 Docker 安装(存储)目录

迁移方案

方法一:软链接

停掉Docker服务:

systemctl stop docker 

根据上面查到的路径,移动整个/var/lib/docker目录到数据盘的目的路径(没有rsync命令时需安装rsync):

rsync -avzP /var/lib/docker  /home/rain/

参数解释:

-a,归档模式,表示递归传输并保持文件属性。
-v,显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P,显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-z, 传输时进行压缩提高效率。

备份数据目录

mv /var/lib/docker  /var/lib/docker.bak

添加软链接

ln -s /home/rain/docker /var/lib/

重新启动docker

systemctl start docker 

启动 Docker 之后,Docker 写入的路径依然是 /var/lib/docker ,但是因为软链接的设置,实际已经是往新的目录写入了。至此,完成了 Docker 安装(存储)目录的迁移。

通过上述方法完成迁移之后,在确认 Docker 能正常工作之后,删除原目录备份数据:

rm -rf /var/lib/docker.bak

方法二:修改默认存储路径

直接移出数据,并修改docker默认存放路径位置

停掉Docker服务:

systemctl stop docker 

根据上面查到的路径,移动整个/var/lib/docker目录到数据盘的目的路径(没有rsync命令时需安装rsync):

rsync -avzP /var/lib/docker  /home/rain/

修改配置默认路径

在EXECStart后面添加--graph=/home/rain/docker/

vim /usr/lib/systemd/system/docker.service  

ExecStart=/usr/bin/dockerd  --graph=/home/rain/docker

重启docker

systemctl daemon-reload
systemctl start docker

查看docker数据存储目录

[root@ ~]#: docker info | grep "Docker Root Dir"
Docker Root Dir: /home/rain/docker

确认之前的镜像是否还在

docker images     

通过上述方法完成迁移之后,在确认 Docker 能正常工作之后,删除原目录数据:

rm -rf /var/lib/docker

方法三:通过mount挂载的bind命令

备份 fstab文件

cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)

停掉Docker服务:

systemctl stop docker 

根据上面查到的路径,移动整个/var/lib/docker目录到数据盘的目的路径(没有rsync命令时需安装rsync):

rsync -avzP /var/lib/docker  /home/rain/

将备份保存

mv /var/lib/docker/ /var/lib/docker.bak

通过mount挂载的bind命令将新位置挂载到老位置

# 创建挂载点
mkdir /var/lib/docker
mount --bind /home/rain/docker /var/lib/docker
mount -a

创建开机自动挂载

vim /etc/fstab
# 最后一行添加
/home/rain/docker /var/lib/docker                     none    bind            0 0
# 挂载
mount -a

如有必要重启服务器确认是否成功迁移

reboot

通过上述方法完成迁移之后,在确认 Docker 能正常工作之后,删除原目录备份数据:

rm -rf /var/lib/docker.bak
相关文章
|
4月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
397 57
|
4月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
327 59
|
5月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
8月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
1333 82
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
337 28
|
9月前
|
存储 缓存 Docker
docker: No space left on device处理与迁移目录
通过以上方法,可以有效地管理 Docker 的磁盘使用情况,并确保 Docker 运行环境的稳定性和效率。
826 34
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
815 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
188 1
|
存储 Docker 容器
docker中挂载现有目录作为数据卷
【10月更文挑战第14天】
211 1
|
网络协议 Docker 容器
docker pull命令拉取镜像失败的解决方案
docker pull命令拉取镜像失败的解决方案
6283 1