我如何知道我的 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 容器内的 entrypoiny 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

原文由 haren 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 513
1 个回答

您可以安装 mysql-client 软件包并使用 mysqladmin ping 目标服务器。在使用多个 docker 容器时很有用。结合 sleep 并创建一个简单的等待循环:

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

原文由 flamemyst 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题