我更改了系统上的 docker 数据根目录,因为 var 分区开始填满,随后本教程但替换--data-root
为-g
。切换后,我的一个 docker 容器启动并开始正常工作,但其余容器在每次我尝试使用 docker compose 命令执行任何操作时都会失败并出现如下错误:
Error response from daemon: stat /home/docker/internals/overlay2/0a2666accf63f7d7c640208cadbf041cc05b0366a4c8134958abadbdabd892f4: no such file or directory
看起来该覆盖确实不存在,所以我猜 rsync 命令不知何故遗漏了某些内容,我该如何恢复?有没有办法告诉 docker compose 重新创建其覆盖?谢谢!
答案1
解决方案:显然,将 docker 的根数据文件夹移动到另一个位置会破坏一些指向存储状态的“指针”和/或确实会破坏覆盖层,而重新创建它们的方法是彻底清除所有图像并使用 docker compose 文件从头开始重建所有内容。要删除所有图像并使所有内容都必须重建,我使用了:
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
然后我就这么做了
docker compose up -d
在每个目录中。幸运的是,我没有丢失任何重要的状态,因为所有这些都存储在 Docker 容器镜像外部的数据库中,正如它们应该的那样!我喜欢 Docker 的无状态性。