mysql - 我如何知道我的 docker mysql 容器何时启动并且 mysql 已准备好接受查询?

标签 mysql bash shell docker

我正在部署几个不同的 docker 容器,mysql 是第一个。我想在数据库启动后立即运行脚本并继续构建其他容器。该脚本一直失败,因为它试图在设置 mysql(来自 this official mysql container)的入口点脚本仍在运行时运行。

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

最佳答案

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

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

关于mysql - 我如何知道我的 docker mysql 容器何时启动并且 mysql 已准备好接受查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25503412/

相关文章:

c - 使用 printf() 在 C 中打印 shell 命令行

php - mysql左连接多列

php - 在一个查询中执行多个 mysql 更新

regex - 从文件中的所有行中提取一个字符串

bash - 如何提取两个非字符模式之间的单词?

c++ - 为 Windows x64 构建 log4cplus

shell - 我不小心使用 rm *$* 删除了存储库中的文件

mysql - 是否可以在 MySQL 中禁用没有默认值的字段的自动空值插入?

mysql select inner join with limit

bash - AWS S3 : How to check if a file exists in a bucket using bash