【发布时间】:2017-09-20 22:31:24
【问题描述】:
我发现当我使用 docker-compose 关闭我的 gunicorn (19.7.1) python 应用程序时,总是需要 10 秒才能关闭。这是 docker-compose 在强制终止进程之前等待的默认最长时间(使用 -t / --timeout 参数调整)。我认为这意味着 gunicorn 没有被优雅地关闭。我可以通过以下方式重现:
docker-compose.yml:
version: "3"
services:
test:
build: ./
ports:
- 8000:8000
Dockerfile:
FROM python
RUN pip install gunicorn
COPY test.py .
EXPOSE 8000
CMD gunicorn -b :8000 test:app
test.py
def app(_, start_response):
"""Simplest possible application object"""
data = b'Hello, World!\n'
status = '200 OK'
response_headers = [
('Content-type', 'text/plain'),
('Content-Length', str(len(data)))
]
start_response(status, response_headers)
return iter([data])
然后运行应用程序:
docker-compose up -d
并优雅地停止它:
docker-compose stop
版本:
docker-compose version 1.12.0, build b31ff33
我宁愿让 gunicorn 优雅地停下来。我认为它应该能够基于base.py中的信号处理程序。
上述所有情况也适用于两次使用docker-compose up -d 更新图像,第二次使用新图像替换旧图像。
我是否误解/误用了某些东西? docker-compose 发送什么信号来停止进程? gunicorn 不应该使用它吗?我应该能够在 10 秒内重新启动我的应用程序吗?
【问题讨论】:
标签: python docker docker-compose gunicorn