Can';通过docker部署时,不要在Heroku应用程序中处理SIGTERM
我正在迁移现有的Heroku应用程序,以便使用Docker而不是git进行部署。应用程序正在使用一个自定义SIGTERM处理程序,该处理程序在dyno终止时不会被调用 SIGTERM处理程序在通过git部署时工作正常,但在通过Heroku部署时无法运行 以下是我的Dockerfile中的相应行:Can';通过docker部署时,不要在Heroku应用程序中处理SIGTERM,docker,heroku,sigterm,Docker,Heroku,Sigterm,我正在迁移现有的Heroku应用程序,以便使用Docker而不是git进行部署。应用程序正在使用一个自定义SIGTERM处理程序,该处理程序在dyno终止时不会被调用 SIGTERM处理程序在通过git部署时工作正常,但在通过Heroku部署时无法运行 以下是我的Dockerfile中的相应行: RUN exec python3 main.py (我已经尝试过不使用exec,但这似乎并不重要。) dyno立即停止,状态代码为143。没有信号处理程序被解雇的迹象 这个问题类似于:我有一个奇怪的P
RUN exec python3 main.py
(我已经尝试过不使用exec
,但这似乎并不重要。)
dyno立即停止,状态代码为143。没有信号处理程序被解雇的迹象
这个问题类似于:我有一个奇怪的PID 1进程,它有一个不同的UID,这意味着我无法控制它。它可能在不让应用程序知道的情况下处理SIGTERM本身
编辑:主进程的命令行是sh-l-c'sh-c python3\main.py'
,或者sh-l-c'python3 main.py'
如果使用ENTRYPOINT
而不是CMD
,您应该使用:
entrypointexec python3 main.py
作为Dockerfile的最后一行
然后python进程将有pid 1并接收SIGTERM。是
运行exec python3 main.py
Dockerfile的最后一行吗?是的,这是最后一行。很难用“奇怪的pid 1”来辅助。请显示容器中运行的进程列表,以显示您拥有的进程。请记住,我们看不到您的屏幕。不幸的是,这不起作用ENTRYPOINT python3 main.py
根本不启动,而ENTRYPOINT/app/main.py
启动(在main.py中使用shebang),但仍然无法处理SIGTERM.please,在容器内共享完整的dockerfile和ps-ef
的输出。在容器启动后,我最终通过将/bin/sh
替换为我的入口点来处理SIGTERM。即使我使用ENTRYPOINT
,也会出现sh
过程(他们可能通过这种方式使用配置变量填充环境)。容器中没有ps
。是的,我已编辑了我的答案exec
应该使python进程具有pid 1,而不是/bin/sh
。shebang应该/bin/python3
我猜很不幸,这也不起作用。如果我将exec
与ENTRYPOINT
一起使用,dyno将无法启动。