【发布时间】:2020-02-24 04:53:11
【问题描述】:
我正在迁移现有的 Heroku 应用程序以使用 Docker 而不是 git 进行部署。该应用程序正在使用自定义 SIGTERM 处理程序,该处理程序不会在测功机终止时被调用。
SIGTERM 处理程序在通过 git 部署时工作正常,但在通过 Heroku 部署时无法运行。
这是我的 Dockerfile 中的相应行:
RUN exec python3 main.py
(我已经尝试不使用exec,但这似乎并不重要。)
测功机立即停止,状态码为 143。没有信号处理程序被触发的迹象。
这个问题类似于this one:我有一个奇怪的 PID 1 进程,它有不同的 UID,这意味着我无法控制它。它可能在不让应用程序知道的情况下自行处理 SIGTERM。
编辑:主进程的命令行是sh -l -c 'sh -c python3\ main.py',如果使用ENTRYPOINT 而不是CMD,则为sh -l -c 'python3 main.py'。
【问题讨论】:
-
RUN exec python3 main.py是您的Dockerfile的最后一行吗? -
是的,这是最后一行。
-
很难协助处理“奇怪的 PID 1”。请显示在您拥有的容器内运行的进程列表。请注意,我们看不到您的屏幕。