1. ホーム
  2. mongodb

[解決済み] dockerコンテナの起動を待つにはどうしたらよいですか?

2023-02-01 22:44:06

質問

コンテナ内でサービスを実行するとき、例えばmongodbとすると、コマンドは

docker run -d myimage

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

Dockerにはコマンド wait というコマンドがありますが、この場合、コンテナが存在しないので動作しません。 dockerの制限なのでしょうか?

どうすれば解決するのでしょうか?

でコメントされているように 類似の問題 を参照してください。

HEALTHCHECK のサポートは上流にマージされ、以下のように docker/docker#23218 - これは、次のコンテナを開始する前に、コンテナが健全であるかどうかを判断するために考慮することができます。

これは、以下のように利用できます。 ドッカー 1.12rc3 (2016-07-14)

docker-compose は処理中です で、特定の条件を待つ機能をサポート中です。

これは libcompose を使用し (そのため docker インタラクションを再構築する必要がありません)、このために多くの設定コマンドを追加しています。ここでチェックしてみてください。 https://github.com/dansteen/controlled-compose

このようにDockerfileで使用することができます。

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

公式のドキュメントです。 https://docs.docker.com/engine/reference/builder/#/healthcheck