実行中の Docker コンテナを実際的に停止して削除したいと考えています。これはビルド スクリプト用です。
次の例を見てみましょう。bash スクリプトの NAMES 列に表示されている Docker コンテナ「rabbitmq」を停止して削除するにはどうすればよいでしょうか。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9909a5e2856f rabbitmq-image "/docker-entrypoint.s" 11 minutes ago Up 11 minutes 0.0.0.0:5672->5672/tcp, rabbitmq
8990dd1fe503 redis-image "/entrypoint.sh redis" 6 weeks ago Up 4 days 0.0.0.0:32770->6379/tcp redis
etc
次のコマンドはコンテナを削除し、私がやりたいことを実行します
docker stop rabbitmq && docker rm -f rabbitmq
しかし、それをスクリプトにまとめるとどうなるか知りたいですよね?こんな感じになると思います。
#!/bin/bash
if [ /*docker ps check some value */ ]; then
docker stop rabbitmq && docker rm -f rabbitmq
fi
ベストアンサー1
おそらくお気づきかと思いますが、docker stop
コンテナdocker rm
が存在しないか実行されていない場合は、失敗を示すステータス コードで終了します。その結果、ビルドは失敗します。
ビルド ログ内のエラー メッセージに対処できる場合は、次の小さなトリックを実行して、シェル コマンドが失敗するのを防ぐことができます。
docker stop rabbitmq || true && docker rm rabbitmq || true
いずれかの docker コマンドが失敗した場合は、true
が呼び出され、常に成功を示すステータス コードで終了します。