docker-compose
を使用して複数のコンテナをオーケストレーションしようとしています。トラブルシューティングを行うために、私は頻繁にコンテナ内からbashを実行します:
$ docker-compose run --rm run web bash
Bashセッションを終了するときにこれらのコンテナーが削除されるように、常に--rm
スイッチを渡そうとします。ただし、場合によっては、それらが残り、docker-compose ps
の出力に表示されます。
Name Command State Ports
----------------------------------------------------------------------------------
project_nginx_1 /usr/sbin/nginx Exit 0
project_nginx_run_1 bash Up 80/tcp
project_web_1 python manage.py runserver ... Exit 128
project_web_run_1 bash Up 8000/tcp
この時点で、これらのコンポーネントを手動で停止および削除しようとしていますが、どうしてもできません。私は試した:
$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1
他のコマンドrm
、kill
なども試しました。
これらのコンテナを取り除くにはどうすればよいですか?
編集:
docker-compose ps
の出力を修正しました。
docker stop
を使用する代わりに、 docker-compose
コマンドでテストコンテナを停止します。
docker-compose
は多くのコンテナを一緒に起動するときに輝いていますが、docker-compose
を使用してコンテナを起動しても、docker
コマンドを使用して個々のコンテナで必要なことを実行できます。
docker stop project_nginx_run_1 project_web_run_1
また、コンテナをデバッグしているので、 docker-compose exec <service id> bash
を使用して、実行中のコンテナでシェルを取得することをお勧めします。これには、新しいコンテナを開始しないという利点があります。
Docker-composeでは、2つの方法でサービスを停止できますが、両方のオプションに関する詳細情報を追加したいと思います。
要するに
docker-compose down
コンテナ、ネットワーク、イメージ、およびボリュームを停止して削除する
docker-compose stop
サービスを停止
docker-compose run
サービスを開始しますproject_nginx_run_1およびproject_web_run_1
docker-compose down
ログは$ docker-compose down
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...
.
. some service logs goes here
Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
Removing project_web_run_1 ... done
Removing project_nginx_run_1 ... done
Removing network project_default
docker-compose stop
ログは$ docker-compose stop
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...
.
. some service logs goes here
Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
docker-compose
は、docker
とは異なり、yml
ファイルで定義されているコンテナーの名前を使用します。したがって、コンテナを1つだけ停止するには、コマンドは次のようになります。
docker-compose stop nginx_run
docker-compose down
docker-compose ps
がそれを生成しないため、それが起動されたディレクトリ内から、それが停止したことを確認することができた唯一の方法です!