docker stopやctrl + cでコンテナが停止しない時の対処法(docker for desktop)

docker-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Dockerで起動中のコンテナを停止しようと、ctrl + c やdocker stopを実行したところ停止できずに、待機の状態が続く場合の対処法について。

症状

Railsコンテナと一緒に起動したDBコンテナのみが停止できない状態。

以下の、rails-aa-dbコンテナ。

$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS        PORTS                               NAMES
7cbc7a448642   postgres    "docker-entrypoint.s…"   17 hours ago   Up 2 hours    5432/tcp                            rails-aa-db


停止指示を出してから放置し続けると、最終的にはエラーで終わり、結局コンテナを停止できない。

Gracefully stopping... (press Ctrl+C again to force)
Stopping rails-aa-web ... done
Stopping rails-aa-db  ...

ERROR: for rails-aa-db  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=70)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

タイムアウトが発生している。

なお、docker restartdocker container rm -f <コンテナ名> も使えない状態。


対処法

dockerのコンテナがスタックしていることが原因です。解消するには、docker自体(dockerデーモン)を再起動する必要があります。

主な方法は2つあります。

  1. PCを再起動する(シンプルに)
  2. docker desktopを再起動する。

どちらも同じです。(※起動中のコンテナは全て停止します)

docker desktopの再起動

docker desktopを再起動するには、起動中のdockerのアイコンをクリックして、Restartを選択します。

これで、Docker自体を再起動できます。

再起動したら、docker ps で確認するとコンテナが全て停止していることが確認できます。

$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS         PORTS                                                  NAMES
タイトルとURLをコピーしました