8

我有一个正在运行 postgresql db 的 docker 容器,但它被我的意外删除了Apache Mesos Marathon.

有什么方法可以恢复容器或至少获取数据库文件?

谢谢

4

2 回答 2

7

如果它只是停止而不是删除,您应该能够在下面找到它docker ps -a并运行docker start CONTAINER.

除非使用 删除数据库,否则docker rm -v CONTAINER数据库文件可能仍在某个目录中/var/lib/docker/vfs/dir/,但您可能很难确定是哪个目录。如果您确实设法找出正确的目录,您应该能够通过将目录挂载到新的数据库实例来恢复数据库。

于 2015-03-23T09:25:33.883 回答
6

接受的答案是正确的,但是我想添加通过其 docker 卷恢复应用程序(在我的情况下是 PostgreSQL 数据库)的具体步骤。

我正在使用 Docker 版本 18.09.0,在 CentOS 中构建 4d60db4。

  1. /var/lib/docker/volumes/
  2. 在此文件夹中,有一些文件夹被命名为容器 ID。每个容器 ID 文件夹都有一个_data文件夹,其中包含该容器的应用程序文件。找到您要恢复的特定卷并将其容器 ID 保存在某处,以便在接下来的步骤中记住它。
  3. 运行命令docker volume ls以确保容器 ID 列为卷。那将是我们volume_name的恢复。
  4. 如果您不记得默认的挂载目标,请通过 command 运行一个虚拟容器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. 此时,一个包含旧数据的容器将可用。
于 2019-09-29T12:14:47.790 回答