docker迁移

目录

前言

大概思路

一、停止docker 

二、备份数据到/home

三、修改docker启动文件指定数据目录

重启docker发现报错

四、清理数据

df -Th查看确认

奇葩问题

rm -rf /var/lib/docker 出现设备资源正忙

发现 “/” 满了

ls / | grep -v home | xargs du -sh

du -sh * | grep G


前言

因docker创建新的容器时报错

报错如下

docker: Error response from daemon: write /var/lib/docker/overlay2/10ee9f451a95b1ff1234a621a90a08d8af5a2e47e6e0350017
See "docker run --help'.

通过运行df -Th命令,可能会发现docker默认挂载到的位置在/var/lib/docker下。

针对这个问题的解决方法之一是迁移Docker的数据目录。在这里,我将数据目录迁移至/home/目录下,但实际迁移位置可能会因环境而异。

请注意,迁移docker数据目录是一个敏感操作,务必在操作前备份数据以防意外发生。

大概思路

1、停止docker 
2、备份数据到/home
3、修改docker启动文件指定数据目录
4、清理数据
5、启动docker

一、停止docker 

停止docker

systemctl stop docker

二、备份数据到/home

然后备份/var/lib/docker下的所有内容 到/home/docker
cp -pr  /var/lib/docker /home/docker

三、修改docker启动文件指定数据目录

vi /etc/systemd/system/docker.service

原文件ExecStart=/usr/bin/dockerd

现需要对docker.service做出如下修改,修改内容如下

ExecStart=/usr/bin/dockerd -g /home/docker

重启docker发现报错

journalctl -xe查看日志发现是因为docker的版本不一样

再次修改配置文件

-g 换成 --data-root

然后重启 docker,重启之后无报错。docker info 查看docker的信息

四、清理数据

再次备份(确保在进行敏感操作之前有可靠的数据备份是非常重要的)

cp -pr /var/lib/docker /home/BAK_20240318_docker   

备份完了,然后你就可以删掉 /var/lib/docker了

但是在删除/var/lib/docker之前,请确保Docker服务已经停止运行,以避免删除正在使用的文件和目录,进而导致系统故障。

在删除之前,确保docker服务已停止:

sudo systemctl stop docker
sudo rm -rf /var/lib/docker
 

df -Th查看确认

遇到docker数据目录迁移的问题时,确保在执行删除操作前先停止Docker服务。如果遗忘此步骤导致问题,不必惊慌。停止Docker服务后再次执行sudo rm -rf /var/lib/docker即可解决。上述内容即是迁移docker的全流程。

下面是我遇见的奇葩问题,有兴趣的读者可继续翻阅。

在后端开发中,确实会遇到各种各样的问题,有时候问题的根源并不总是显而易见的。因此,细心观察、诊断问题并采取适当的解决措施是至关重要的。例如我就遇到rm -rf /var/lib/docker 出现设备资源正忙,按理说不应该啊,迁移完成之后 /var/lib/docker 应该释放了。 排查了半个小时才得出结论“遇到docker数据目录迁移的问题时,确保在执行删除操作前先停止Docker服务”。

奇葩问题

rm -rf /var/lib/docker 出现设备资源正忙

停止docker服务后再次执行sudo rm -rf /var/lib/docker即可解决

发现 “/” 满了

ls / | grep -v home | xargs du -sh

这个命令的含义是:

  • ls /:列出根目录下的所有文件和文件夹。
  • grep -v home:通过grep命令筛选出不包含(-v选项表示反选)"home"关键词的行,即过滤掉包含"home"关键词的行。
  • xargs du -sh:将grep命令的输出作为参数传递给du -sh命令。

然后,du -sh命令用于查看文件或目录的磁盘使用情况,其中:

  • du:是Disk Usage的缩写,用于查看文件或目录的磁盘使用情况。
  • -s:表示只显示总大小,而不列出每个子目录的大小。
  • -h:表示以易读的格式(如KB、MB、GB等)显示大小。

综合起来,这个命令的作用是列出根目录下所有不包含"home"关键词的文件和文件夹,并显示它们的磁盘使用情况。

du -sh * | grep G

这个命令的含义是:

  • du -sh *:计算当前目录下所有文件和文件夹的磁盘使用情况,并以易读的格式显示它们的大小。
  • grep G:通过 grep 命令筛选出包含 "G"(表示GB)的行,即过滤出大小超过1GB的文件或文件夹。

因此,这个命令的目的是列出当前目录下大小超过1GB的文件或文件夹的磁盘使用情况。

确保在删除任何文件之前,特别是在生产环境中,进行充分的审查和确认是非常重要的。删除文件可能会导致数据丢失或系统不稳定,因此必须小心谨慎。

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值