Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';通过docker部署时,不要在Heroku应用程序中处理SIGTERM_Docker_Heroku_Sigterm - Fatal编程技术网

Can';通过docker部署时,不要在Heroku应用程序中处理SIGTERM

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

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

SIGTERM处理程序在通过git部署时工作正常,但在通过Heroku部署时无法运行

以下是我的Dockerfile中的相应行:

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将无法启动。