Docker存储目录迁移的坑:一个参数引发的血案!

背景:项目需要,需要对 Docker 的存储目录进行迁移。

迁移的步骤大致如下:

1、停 docker 服务;

2、修改 docker 配置;

这里直接修改的 /etc/docker/daemon.json,在其中添加:

1
2
3
4
{
"data-root": "/home/data/docker",
"pidfile": "/home/run/docker/docker.pid"
}

3、迁移原数据目录到新目录下;

4、重启 docker 服务;

一般来说,经过以上 4 步,之前的 docker 服务都能继续正常运行。

问题

项目中有些是使用 docker-compose 进行管理的,其中就包括 ELK。

发现在目录迁移后,ELK 的服务无法正常启动:

其中,elasticsearch 报错信息如下:

logstash 的报错信息:

解决过程

网上进行了一些检索。

有人提到,尝试重新导入镜像

该方法在前几个环境,均能解决问题。

但是在一些环境,不管怎么导,都无法解决问题。

我们尝试了目录的回退。

发现回退后,服务又可以正常运行。

很明显,是目录迁移后,权限发生了变化。

那么问题到底出在哪里呢?

我找出了操作步骤,其中迁移目录的命令是:

1
cp -R /var/lib/docker /home/data/

-R 是什么含义呢?

查阅 cp 命令的帮助文档:

发现 -R 是递归的含义,也就是说会进行递归复制。

但是复制后的文件权限有办法保证吗?

我们发现了 -p 参数:

它可以保留源文件的属性。

解决方法

将之前拷贝的目录进行备份(或者直接删除),重新拷贝源 docker 数据目录到新的目录下。

这次使用命令:

1
cp -rp /var/lib/docker /home/data/

再重启 docker。

再去观察 ELK 服务的状态:

一切恢复正常。

参考:

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/docker-mv-path.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%