我正在部署几个不同的 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 许可协议
您可以安装 mysql-client 软件包并使用 mysqladmin ping 目标服务器。在使用多个 docker 容器时很有用。结合 sleep 并创建一个简单的等待循环: