проверка docker-compose up и db запущена

0

У меня есть сценарий 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 устанавливался локально, какой тип поражения использует докер.

Есть ли способ лучше:

  1. Я могу проверить, что db работает без использования mysql.
  2. Я могу запустить сценарий создания, возможно, в контейнере, когда он начнет создавать db, если он не существует.
Теги:
docker

1 ответ

0

Нет никакого позора в том, что на вашем хосте установлены инструменты. Они имеют преимущество использования локальной локальной файловой системы без лишних трюков с переназначением и не требуют запуска привилегий root. Ваш сценарий в порядке; он не побеждает цели Докера вообще.

Один подход "больше 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 "$@"

и используйте это как ENTRYPOINT моего изображения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню