1. ホーム
  2. bash

[解決済み] dockerの実行が成功したかどうかをプログラムで検出するには?

2023-05-22 14:38:51

質問

私は、コンテナがまだ構築され、正しく起動し、内部のアプリがリクエストに応答することをすばやくチェックするために、非常に単純なbashスクリプトを書いています。

時々 docker run が失敗することがあります。例えば、コンテナをバインドしようとしているポートがすでに割り当てられているためです。しかし、そのようなときは docker run の終了コードはまだ0なので、終了コードを使用することはできません。コンテナが正しく開始されたことをプログラムで確認するにはどうしたらよいでしょうか。

私が考えている解決策は

  • 出力を解析してエラーを検出する
  • docker ps コンテナが実行されているかどうかを確認するために

がありますが、これらは両方とも少しやりすぎで醜いようです。私は docker run が成功したかどうかを確認する、より良い方法を見逃していませんか?

どのように解決するのですか?

Abel Muiñoがコメントで提案したように、これはより最近のDockerバージョンで修正された可能性があります(私は現在0.9.1を実行しています)。

しかし、古いバージョンで私のように一時的に立ち往生している場合、コンテナが起動したかどうかを確認するための適切な回避方法を見つけました。 docker inspect .

docker inspect は、コンテナに関する多くの情報、特にコンテナが現在実行中か否かを含む JSON オブジェクトを返します。特に、コンテナが現在実行中かどうかが重要です。 -f フラグを使用すると、必要なビットを簡単に抽出することができます。

docker inspect -f {{.State.Running}} $CONTAINER_ID

または

docker inspect -f "{{.State.Running}}" $CONTAINER_ID

true または false .

なお、おそらく sleep 1 (またはそれ以上) の間にコンテナを起動し、それが稼働しているかどうかをチェックします。セットアップに何か問題がある場合、実際に終了する前に非常に短い時間だけ「実行中」として表示される可能性があります。