docker - 通过 docker 部署时无法在 Heroku 应用程序中处理 SIGTERM
问题描述
我正在迁移现有的 Heroku 应用程序以使用 Docker 而不是 git 进行部署。该应用程序正在使用自定义 SIGTERM 处理程序,该处理程序不会在测功机终止时被调用。
SIGTERM 处理程序在通过 git 部署时工作正常,但在通过 Heroku 部署时无法运行。
这是我的 Dockerfile 中的相应行:
RUN exec python3 main.py
(我已经尝试过不使用exec
,但这似乎并不重要。)
测功机立即停止,状态码为 143。没有信号处理程序被触发的迹象。
这个问题与这个问题类似:我有一个奇怪的 PID 1 进程,它有不同的 UID,这意味着我无法控制它。它可能在不让应用程序知道的情况下处理 SIGTERM 本身。
编辑:主进程的命令行是sh -l -c 'sh -c python3\ main.py'
,或者sh -l -c 'python3 main.py'
如果使用ENTRYPOINT
而不是CMD
.
解决方案
你应该使用:
ENTRYPOINT exec python3 main.py
作为 Dockerfile 的最后一行
然后 python 进程将具有 pid 1 并接收 SIGTERM。
推荐阅读
- python - 结合无损脚本导入
- python - Python更改熊猫数据框的名称
- javascript - 从 fetch 回调中调用的 Polymer notifyPath
- amazon-web-services - 如何将 RabbitMQ 消息以 csv 文件格式传输到 Amazon S3 存储桶并使用 Athena 查询存储桶?
- opengl - VSM 阴影的立方体贴图过滤
- regex - 字符串模式的正则表达式匹配
- java - 无需保存在文件系统中的 Pdfbox 签名和保护
- azure - 如何在 Azure AD B2C 中获取访问令牌而不是指向重定向 URL
- python - Geopandas - 地图和位置绘图
- python - 'WSGIRequest' 对象在 django 中没有属性 'Session'