我有这个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的目的相违背。
有没有更好的方法:
答案 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 "$@"
并将其用作我的图片的入口点。