通过docker部署时无法在Heroku应用中处理SIGTERM

时间:2019-10-28 22:21:59

标签: docker heroku sigterm

我正在迁移现有的Heroku应用程序以使用Docker而不是git进行部署。该应用程序使用的是自定义SIGTERM处理程序,在dyno终止时不会调用该处理程序。

通过git部署时,SIGTERM处理程序工作正常,但通过Heroku部署时,运行失败。

这是我的Dockerfile中的相应行:

RUN exec python3 main.py

(我已经尝试过不使用exec,但这似乎无关紧要。)

测功机立即停止,状态码为143。没有信号处理程序被触发的迹象。

此问题类似于this one:我有一个奇怪的PID 1进程,该进程具有不同的UID,这意味着我无法控制它。可能是在不通知应用程序的情况下处理了SIGTERM本身。

编辑:主进程的命令行为sh -l -c 'sh -c python3\ main.py',如果使用sh -l -c 'python3 main.py'而不是ENTRYPOINT,则为CMD

1 个答案:

答案 0 :(得分:0)

您应该使用:

ENTRYPOINT exec python3 main.py作为Dockerfile的最后一行

然后python进程将具有pid 1并接收SIGTERM。