恢复已删除的 Docker 容器

13
我有一个运行postgresql数据库的docker容器,但它被 Apache Mesos Marathon 不小心删除了。是否有办法恢复容器或至少获取数据库文件?谢谢
2个回答

14

接受的答案是正确的,但是我想补充一下如何通过 Docker Volume 来恢复应用程序(在我的情况下是 PostgreSQL 数据库)的具体步骤。

我使用的是 CentOS 中的 Docker 版本 18.09.0,构建版本为 4d60db4。

  1. 进入路径 /var/lib/docker/volumes/
  2. 在此文件夹中,有以容器 ID 命名的文件夹。每个容器 ID 文件夹都有一个包含该容器应用程序文件的 _data 文件夹。找到您要恢复的特定卷并将其容器 ID 保存在某个地方以便记住下一步要使用。
  3. 运行命令 docker volume ls 确认容器 ID 被列为卷。这将是我们要恢复的 volume_name
  4. 如果您不记得默认挂载目标,可以通过命令 docker run -d --name postgres -p 5432:5432 postgres 运行虚拟容器。
  5. 运行命令 docker inspect postgres
  6. 找到 Mounts 部分并检查 Destination。在我的情况下,它是 /lib/postgresql/data
  7. 停止并删除刚刚启动的虚拟容器。
  8. 运行命令 docker run -d --name postgres -p 5432:5432 --mount source=volume_name,target=/var/lib/postgresql/data postgres
  9. 此时将可用一个包含旧数据的容器。

10
如果只是停止了容器而不是删除了,你应该能够在docker ps -a下找到它,并运行docker start CONTAINER来启动它。
除非使用docker rm -v CONTAINER删除了数据库,否则数据库文件可能仍然在/var/lib/docker/vfs/dir/目录的某个位置,但您可能很难确定哪一个。如果您成功确定了正确的目录,您应该可以通过将该目录挂载到新的数据库实例中来恢复数据库。

我找到了解决方法,我正在查看相同的目录并成功地进行了恢复。谢谢。 - eugene
我发现了在 /var/lib/docker/volumes/{some_long_name}/_data 中被移除的数据库。 - pliashkou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接