还原已删除的容器 docker

Restore deleted container docker

我有一个 docker 容器,它是 运行 postgresql 数据库,但它被我的 Apache Mesos Marathon.

意外删除了

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

谢谢

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

下找到它

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

接受的答案是正确的,但是我想添加具体步骤以通过其 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. 如果您不记得默认安装目标,运行 通过命令 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. 此时包含旧数据的容器将可用。