首页 > 解决方案 > 如何将运行在 Docker 容器中的 Flyway 连接到运行在 Docker 容器中的数据库?

问题描述

我们使用 Microsoft SQL Server 作为数据库并使用 Flyway 来管理它。现在我想通过在 Docker 中启动 SQL Server 和在我自己的 Docker 容器中启动 Flyway 来测试 Flyway 脚本,该容器包含所有配置和所有 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 中正确的做法是什么?我知道那里的 pod 从所有正在运行的 pod 中获取主机和端口作为环境变量(请参阅我的假设解决方案)。但是这些变量没有解决,它没有解决我的问题。

你是怎么做这样的测试的?

标签: sql-serverdockerflyway

解决方案


如果我说对了,问题是关于如何在没有docker-compose. 实际上docker-compose在这些方面并没有增加很多 - 它只是自动化了几个步骤。

要连接容器,您必须:

  1. 创建新的用户定义的桥接网络(完成一次):docker network create foo

  2. --network=foo使用启动选项将两个容器连接到此网络

  3. 指定容器名称而不是自动生成的--name=xyz

  4. 在连接字符串中使用这些名称而不是 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 连接到 SQLserver=my-database


推荐阅读