Postgres无法在群集服务器重新启动时启动

时间:2019-05-29 20:41:40

标签: postgresql docker

我正在尝试使用docker swarm运行应用程序。该应用程序旨在使用docker swarm在单个计算机上完全本地运行。

如果我通过SSH进入服务器并运行docker stack,则部署一切正常,如运行docker service ls所示:

result of docker service ls. all services up

此部署正常运行时,服务通常按以下顺序启用:

  1. 注册表(私人注册表)
  2. 主要(Nginx服务)和Postgres
  3. 所有其他服务以随机顺序(所有Node应用程序)

我遇到的问题是重新启动。当我重新启动服务器时,我经常遇到服务失败的问题,并显示以下结果:

after server reboot

我遇到了一些可能会有所帮助的错误。

在Postgres中:docker service logs APP_NAME_postgres -f

docker service logs APP_NAME_postgres -f after reboot

在Docker日志中:sudo journalctl -fu docker.service

sudo journalctl -fu docker.service after reboot

1 个答案:

答案 0 :(得分:1)

在我看来,您需要检查的是谁/什么杀死了postgres服务。从您发布的日志看来,postrgres似乎收到了智能关机信号。然后,邮差轻轻地停下来。您的堆栈文件已将重启策略设置为“ on-failure”,并且由于postres进程缓慢停止(退出代码0),因此docker不会将其视为失败,也不会按照指示进行重启。

最后,我建议将重新启动策略从“发生故障”更改为“任意”。

此外,请记住,在群中会忽略您使用的“ depends_on”设置,并且您需要采用自己的服务/映像来确保正确的启动顺序,或者在相关服务尚未启动时能够工作。

您还可以尝试-健康检查。也许您的postgres基本映像已定义了运行状况检查,并且通过向其发送终止信号来终止容器。如前所述,postgres会缓慢关闭,并且没有错误退出代码,并且不会触发重启策略。尝试在Yaml中禁用运行状况检查,或转到dockerfiles以查看运行状况检查指令,并找出其触发原因。