2017-06-14 65 views
0

我尝试使用'docker restart'命令在Docker中重新启动Postgres。它停止了,但我无法启动它。当我运行命令“ps -a”时,它将状态显示为“已退出”。有什么方法可以重新启动吗?我不想丢失该数据库中的任何数据。
容器在重新启动期间有一个活动连接。这是否会造成问题?在Docker中重新启动Postgres

+0

您需要为您的问题添加更多信息。用什么命令启动原始容器?什么版本的Docker? Docker安装了什么主机操作系统?如果安装在macOS上,您是使用Docker for Mac还是Docker Machine? docker logs '的输出是什么?什么是退出代码? –

回答

0

如果容器因错误或其他原因而崩溃,则可能无法重新启动它。但是,通过从要恢复的容器中创建新映像,您仍然应该能够恢复至少部分数据。这里是你如何做到这一点:

  1. 首先,列出所有已在你的机器上运行的容器:

    docker ps -a 
    
  2. 找出哪一个是与所有你想要的数据运行容器恢复。您应该能够从CREATED字段中找出(您知道何时启动它)。

  3. 抓住散列(CONTAINER_ID)容器,并执行以下命令:

    docker commit <hash> <a_new_name:tag> 
    

    这将容器保存为可以执行图像。

  4. bashsh会话中,执行容器,这取决于我们的基本图像提供:

    docker run --entrypoint sh/bash -it <a_new_name:tag> 
    

这将使你在退出时获得的容器的状态,这将允许您检查其条件,发现错误并可能恢复某些数据。祝你好运!

+0

谢谢。我刚刚检查了日志。它说'错误:好像另一个PostgreSQL服务器使用DB数据,因为'/var/lib/pgsql/data/data/postmaster.pid'文件已经存在。如果您确定pidfile是剩余的,请使用'clear_pgdata_pidfile'选项(请参阅'容器使用'了解更多信息)'。我试图恢复同一个容器。 –

+0

我提交了图像并使用该图像创建了一个新的容器。它创建了一个新的容器,但我无法连接到数据库。不是因为理由而起诉。最后以root用户身份登录并删除'/var/lib/pgsql/data/data/postmaster.pid'。现在我能够成功启动相同的容器。我将详细探讨如何使用创建的图像创建容器。 –

+0

我永远不会推荐从这样的现有容器提交图像。您的数据应该已经成为数量,并且100%可以访问。使用'docker检查'来查看卷是否在那里。如果您使用的是官方的'postgres'映像,那么您的/ var/lib/pgsql文件夹一定会拥有一个卷。 – programmerq

相关问题