docker mysqlコンテナが起動し、mysqlがクエリを受け取る準備ができているかどうかはどうすればわかりますか? 質問する

docker mysqlコンテナが起動し、mysqlがクエリを受け取る準備ができているかどうかはどうすればわかりますか? 質問する

私はいくつかの異なるDockerコンテナをデプロイしています。最初のものはmysqlです。データベースが起動したらすぐにスクリプトを実行し、他のコンテナの構築に進みたいのですが、スクリプトが失敗するのは、mysqlをセットアップするエントリポイントスクリプト(この公式MySQLコンテナ)はまだ実行されていました。

sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=MY_ROOT_PASS -p 3306:3306 -d mysql
[..] wait for mysql to be ready [..]
mysql -h 127.0.0.1 -P 3306 -u root --password=MY_ROOT_PASS < MY_SQL_SCRIPT.sql

docker コンテナ内でエントリポイント mysql セットアップ スクリプトの終了の信号を待つ方法はありますか? Bash sleep は最適ではない解決策のように思えます。

編集: このような bash スクリプトを試しました。最もエレガントではなく、ちょっと強引ですが、うまく機能します。誰かにとって便利かもしれません。

OUTPUT="Can't connect"
while [[ $OUTPUT == *"Can't connect"* ]]
do
    OUTPUT=$(mysql -h $APP_IP -P :$APP_PORT -u yyy --password=xxx <       ./my_script.sql 2>&1)
done

ベストアンサー1

mysql-client パッケージをインストールし、mysqladmin を使用してターゲット サーバーに ping を実行できます。複数の Docker コンテナーで作業する場合に便利です。sleep と組み合わせて、単純な待機ループを作成します。

while ! mysqladmin ping -h"$DB_HOST" --silent; do
    sleep 1
done

おすすめ記事