我正在尝试使用docker swarm运行应用程序。该应用程序旨在使用docker swarm在单个计算机上完全本地运行。
如果我通过SSH进入服务器并运行docker stack,则部署一切正常,如运行docker service ls
所示:
此部署正常运行时,服务通常按以下顺序启用:
我遇到的问题是重新启动。当我重新启动服务器时,我经常遇到服务失败的问题,并显示以下结果:
我遇到了一些可能会有所帮助的错误。
在Postgres中:docker service logs APP_NAME_postgres -f
:
在Docker日志中:sudo journalctl -fu docker.service
答案 0 :(得分:1)
在我看来,您需要检查的是谁/什么杀死了postgres服务。从您发布的日志看来,postrgres似乎收到了智能关机信号。然后,邮差轻轻地停下来。您的堆栈文件已将重启策略设置为“ on-failure”,并且由于postres进程缓慢停止(退出代码0),因此docker不会将其视为失败,也不会按照指示进行重启。
最后,我建议将重新启动策略从“发生故障”更改为“任意”。
此外,请记住,在群中会忽略您使用的“ depends_on”设置,并且您需要采用自己的服务/映像来确保正确的启动顺序,或者在相关服务尚未启动时能够工作。
您还可以尝试-健康检查。也许您的postgres基本映像已定义了运行状况检查,并且通过向其发送终止信号来终止容器。如前所述,postgres会缓慢关闭,并且没有错误退出代码,并且不会触发重启策略。尝试在Yaml中禁用运行状况检查,或转到dockerfiles以查看运行状况检查指令,并找出其触发原因。