【问题标题】:Restore deleted container docker恢复已删除的容器 docker
【发布时间】:2015-03-23 03:20:43
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: linux docker mesos marathon


    【解决方案1】:

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

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

    【讨论】:

    • 我找到了解决方案,我正在查看相同的目录并且能够恢复它。谢谢
    • 我在 /var/lib/docker/volumes/{some_long_name}/_data 中找到已删除的数据库
    【解决方案2】:

    接受的答案是正确的,但是我想添加具体步骤以通过其 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. 此时包含旧数据的容器将可用。

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2021-02-26
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2020-07-09
      • 2013-02-26
      • 2015-12-18
      相关资源
      最近更新 更多