Dockerコンテナが起動して実行されるまで待つにはどうすればよいですか? 質問する

Dockerコンテナが起動して実行されるまで待つにはどうすればよいですか? 質問する

コンテナ内でサービス(例えばmongodb)を実行する場合、コマンド

docker run -d myimage

すぐに終了し、コンテナ ID を返します。私の CI スクリプトでは、mongo コンテナを実行した直後に、mongodb 接続をテストするためにクライアントを実行します。問題は、サービスがまだ起動していないため、クライアントが接続できないことです。sleep 10スクリプトに大きな値を追加する以外に、コンテナが起動して実行されるまで待機するオプションは見当たりません。

Docker には、コンテナが存在しないため、その場合には機能しないコマンドがありますwait。これは docker の制限ですか?

ベストアンサー1

この簡単な解決策を見つけました。もっと良いものを探していましたが、見つかりませんでした...

until [ "`docker inspect -f {{.State.Running}} CONTAINERNAME`"=="true" ]; do
    sleep 0.1;
done;

または、コンテナが正常であると報告するまで待機したい場合(ヘルスチェックがあると仮定)

until [ "`docker inspect -f {{.State.Health.Status}} CONTAINERNAME`"=="healthy" ]; do
    sleep 0.1;
done;

おすすめ記事