我正在迁移现有的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
。
答案 0 :(得分:0)
您应该使用:
ENTRYPOINT exec python3 main.py
作为Dockerfile的最后一行
然后python进程将具有pid 1并接收SIGTERM。