#sql-server #docker #flyway
#sql-server #docker #flyway
Вопрос:
Мы используем Microsoft SQL Server в качестве базы данных и Flyway для управления ею. Теперь я хотел бы протестировать сценарии Flyway, запустив SQL Server в Docker и Flyway в моем собственном контейнере Docker, который содержит всю конфигурацию и все сценарии базы данных Flyway (миграции).
Насколько я знаю, невозможно использовать переменные среды в файлах конфигурации Flyway. В идеале это было бы возможно:
flyway.url=jdbc:sqlserver://${MSSQL_SERVICE_HOST}:${MSSQL_SERVICE_PORT};databaseName=testing_pp
flyway.user=testing_pp
flyway.password=${MSSQL_SERVICE_PASSWORD}
На самом деле, мне нужно знать наилучшую стратегию как для автономного Docker, так и для OpenShift. Я довольно новичок в обоих…
Есть ли способ ввести IP-адрес и порт из одного запущенного контейнера Docker в другой? Тот, который не включает Docker Compose? И каков был бы правильный способ сделать это в OpenShift? Я знаю, что тамошние модули получают хосты и порты от всех запущенных модулей в качестве переменных среды (см. Мое гипотетическое решение). Но эти переменные не разрешены, это не решает мою проблему.
Как вы проводите такие тесты?
Ответ №1:
Если я вас правильно понял, вопрос заключается в том, как подключить два контейнера docker без docker-compose
. На самом деле docker-compose
это мало что добавляет в этих терминах — это просто автоматизирует несколько шагов.
Для подключения контейнеров необходимо:
-
Создайте новую пользовательскую мостовую сеть (сделано один раз):
docker network create foo
-
Подключите оба контейнера к этой сети с
--network=foo
опцией запуска -
Укажите имена контейнеров вместо автоматически созданных с помощью
--name=xyz
-
Используйте эти имена вместо IP-адресов в строках подключения.
docker network create foo docker run -d --rm --name=my-database --network=foo <SQLServerImageName> docker run -d --rm --name=my-flyway --network=foo <FlyWayImageName>
Теперь вы можете подключиться из Flyway к SQL с server=my-database
Комментарии:
1. Спасибо, это решает одну часть уравнения. Другой способ — ввести это имя в Flyway с помощью переменной окружения.
2.
docker run -d --rm -e "SQL_SERVER=my-database" --name=my-flyway --network=foo <FlyWayImageName>
3. Извините, что заставил вас ждать… Я протестировал все с помощью сценария оболочки. Похоже, что Flyway (который я не запускаю в отключенном режиме, поскольку это одноразовая вещь) не видит сеть: ошибка Flyway Community Edition 5.0.7 от Boxfuse: не удается получить соединение из базы данных (jdbc: sqlserver://flyway: 1433;DatabaseName=etrademark) для пользователя ‘etrademark’: соединение TCP / IP с хостом flyway, порт 1433 имеет потерпел неудачу. Ошибка: «flyway. Проверьте свойства подключения. Убедитесь, что экземпляр SQL Server запущен на хосте и принимает соединения TCP / IP через порт.»
4. Вы знаете, как я мог бы проверить, известно ли контейнеру доменное имя?
5. Моя ошибка заключалась в том, что я использовал сетевое имя в качестве имени домена для подключения. Мне нужно использовать имя Docker, в данном случае
my-database
в моей строке подключения JDBC.