docker-composeでGunicornの優雅な停止

ジョンG

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 -d2回使用してイメージを更新する場合にも当てはまります。2回目は、古いイメージを置き換える新しいイメージで更新します

私は何かを誤解/誤用していますか?docker-composeはプロセスを停止するためにどのようなシグナルを送信しますか?gunicornはそれを使うべきではありませんか?アプリケーションを10秒より速く再起動できる必要がありますか?

deterralba

TL; DR

execdockerfileのCMDの後に追加します: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シグナルを受信しませんでした。

execDockerfileで、私が今持っています

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

そしてそれは動作します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事