检查docker-compose up是否启动并且数据库已经启动

时间:2018-09-18 09:47:31

标签: mysql docker

我有这个bash脚本:

#!/bin/bash

docker-compose up -d

# wait for the database to come up
until mysqlshow --user=root  -h localhost -P 3306 --protocol=tcp > /dev/null 2>&1; do
    echo "Waiting for mysql container..."
    sleep 0.5
done

RESULT=`mysqlshow --user=root  -h localhost -P 3306 --protocol=tcp payments| grep -o payments`

if ! [[ $RESULT = *"payments"* ]]; then
  ./node_modules/.bin/sequelize db:create
fi

./node_modules/.bin/sequelize db:migrate

yarn start

以上方法确实有效,但需要在本地安装mysql,这与使用docker的目的相违背。

有没有更好的方法:

  1. 我可以在不使用mysql的情况下检查数据库是否正常。
  2. 当它开始创建数据库(如果它不存在)时,我可以在容器中运行一个创建脚本。

1 个答案:

答案 0 :(得分:0)

在主机上安装工具不会感到遗憾。这些优点是可以使用本地本机文件系统,而无需使用怪异的重新映射技巧,并且不需要root特权即可运行。您的脚本可以正常使用;它完全没有违反Docker的目的。

您可以采用的一种“更多Dockery”方法,尤其是如果您始终要运行迁移时,将其的后半部分移到应用程序容器中的ENTRYPOINT脚本中。我可能会写一个像这样的脚本:

#!/bin/sh
if [ -n "$MYSQL_HOST" -a -z "$SKIP_DB_SETUP" ]; then
  # TODO: write Node code that waits until a database connection succeeds
  ./node_modules/.bin/sequelize db:create || true
  ./node_modules/.bin/sequelize db:migrate
fi
exec "$@"

并将其用作我的图片的入口点。