![](/img/trans.png)
[英]Understanding Gunicorn and Flask on Docker/Docker-Compose
[英]Gunicorn graceful stopping with docker-compose
我發現當我使用docker -compose關閉我的gunicorn (19.7.1)python應用程序時,它總是需要10秒才能關閉。 這是在強制終止進程之前docker-compose等待的默認最長時間(使用-t / --timeout
參數調整)。 我認為這意味着gunicorn沒有被優雅地關閉。 我可以用以下方法重現:
泊塢窗,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發送什么信號來停止進程? 難道不應該使用它嗎? 我應該能夠以超過10秒的速度重啟我的應用程序嗎?
添加exec
CMD后,在您的dockerfile: CMD exec gunicorn -b :8000 test:app
。
我有同樣的問題,當我運行docker exec my_running_gunicorn ps aux
,我看到類似的東西:
gunicorn 1 0.0 0.0 4336 732 ? Ss 10:38 0:00 /bin/sh -c gunicorn -c gunicorn.conf.py vision:app
gunicorn 5 0.1 1.1 91600 22636 ? S 10:38 0:00 /usr/local/bin/python /usr/local/bin/gunicorn -c gunicorn.conf.py vision:app
gunicorn 8 0.2 2.5 186328 52540 ? S 10:38 0:00 /usr/local/bin/python /usr/local/bin/gunicorn -c gunicorn.conf.py vision:app
1 PID不是gunicorn主機,因此它沒有收到sigterm信號。
有了Dockerfile中的exec
,我現在有了
gunicorn 1 32.0 1.1 91472 22624 ? Ss 10:43 0:00 /usr/local/bin/python /usr/local/bin/gunicorn -c gunicorn.conf.py vision:app
gunicorn 7 45.0 1.9 131664 39116 ? R 10:43 0:00 /usr/local/bin/python /usr/local/bin/gunicorn -c gunicorn.conf.py vision:app
它的工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.