【问题标题】:Docker container lost file after restart docker service or reboot重启 docker 服务或重启后 Docker 容器丢失文件
【发布时间】:2018-07-16 16:51:02
【问题描述】:

我服务器的主驱动器快满了。所以我将/var/lib/docker 目录移动到第二个驱动器位置/media/my-username/sec-drive/docker 使用

sudo -s # enter root mode
service docker stop
rsync -aXS /media/my-username/sec-drive/docker /var/lib/docker
rm -rf /var/lib/docker
ln -s /media/my-username/sec-drive/docker /var/lib/docker
serivce docker start

然后我使用 docker-compose up -d 启动我的所有 docker 容器 所有容器都可以正常工作。

但是当我重新启动或重新启动 docker 服务时,我的一个容器丢失了一堆文件(其他容器工作正常)。其中一个文件是/opt/myproj/mxnet/下的libmxnet.so(filemode:777)

use local mxnet
RuntimeError: Cannot find the files.
List of candidates:
/opt/myproj/mxnet/libmxnet.so
/opt/myproj/mxnet/libmxnet.so
/opt/myproj/mxnet/../../build/libmxnet.so
/usr/local/nvidia/lib/libmxnet.so
/usr/local/nvidia/lib64/libmxnet.so
../../../libmxnet.so

这些文件似乎随机丢失。在 mxnet 文件夹中 __init__.py 丢失但 __init__.pyc 保持正常。这真的是有线的。

然后我尝试删除图像和容器并再次导入,结果相同。

更新:

此错误再次发生在另一台服务器上。但是这次我重新安装了系统,并没有将 docker 移动到另一个驱动器。似乎与docker目录位置无关

【问题讨论】:

  • 如果这发生在我身上,我可能会删除/var/lib/docker 的两个副本中的所有内容并重新开始,根据需要重新运行docker build 和/或docker pull 以恢复我的图像.
  • @DavidMaze 我已尝试删除 /var/lib/docker 和 docker load 图像下的所有文件,但未修复。谢谢 4 回复

标签: docker permissions rsync


【解决方案1】:

您必须指示 docker 守护进程更改文件夹。

在你的docker.service 中你应该添加一个参数(-g):

FROM:
ExecStart=/usr/bin/docker daemon 
TO:
ExecStart=/usr/bin/docker daemon -g /new/path/docker

这里有一些参考资料:

https://www.rb-associates.co.uk/blog/move-var-lib-docker-to-another-directory/

https://linuxconfig.org/how-to-move-docker-s-default-var-lib-docker-to-another-directory-on-ubuntu-debian-linux

【讨论】:

  • 我已经使用了软链接ln -s /media/my-username/sec-drive/docker /var/lib/docker。你的意思是这是导致问题的原因吗?我将尝试您的解决方案并再次发表评论。非常感谢。
  • 我记得我用过软链接。这不是问题。对我来说,这是传递给恶魔的正确参数。
  • 此错误再次出现在另一台服务器上。但是这次我已经重新安装了系统并且没有将 docker 移动到另一个驱动器。似乎与docker目录位置无关。
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2021-11-30
  • 2023-04-05
相关资源
最近更新 更多