python - Docker.py 如何使用 stdin_open=True 停止容器?

标签 python docker dockerpy

有以下代码:

import docker
client = docker.from_env()
container = client.containers.create("ubuntu", stdin_open=True)
container.start()
container.stop()

选项 stdin_open必须设置为 True . stop操作需要 10 秒才能执行(它首先发送 SIGTERM,如果失败,则在 10 秒后发送 SIGKILL)。所以看起来 SIGTERM 被忽略了。如何优雅地停止容器 stdin_open设置为 True ?

最佳答案

这是因为 PID 1 不像 systemd并且不处理 SIGTERM/SIGINT,正如您所期望的。在正常情况下,进程以 PID > 1 的方式运行,而 PID 1 处理系统信号。容器没有 systemd 作为 PID 1 运行,而是您的入口点。现在其他东西已经接管(入口点)并且是 PID 1,处理系统信号是他们的责任。必须对其进行编程以明确地这样做。

您在 docs 中有关于此的警告.

一个解决方案是使用类似 tini 的东西。用作有效的 PID 1 进程。具体来说,在您的情况下处理 SIGINT/SIGTERM,并且 SIGKILL 不需要 10 秒超时。

关于python - Docker.py 如何使用 stdin_open=True 停止容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61506752/

相关文章:

python - tkinter 和 matplotlib : windows not showing until program closes under Linux

python - 如何在线程池执行的函数中仅发送一次电子邮件?

azure - 文件不在 docker workdir azure web 应用程序中

docker - Docker 与 Mirage OS 等外核方法有何关联?

python - 在docker-py中公开网络上的端口

dockerpy - 如何使用 docker-py 运行 docker 标签

javascript - 查询数据库时,从通过 getJSON 获取的列表中删除项目

docker - redis哨兵高可用haproxy

dockerpy - 停止 docker-py 事件流迭代

python - 为什么单精度和 double 比较在 numpy 中失败?