如何将运行在 Docker 容器中的 Flyway 连接到运行在 Docker 容器中的数据库?

3
我们使用Microsoft SQL Server作为数据库,同时使用Flyway来管理它。现在我想通过在Docker中启动SQL Server和Flyway来测试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的最佳策略。我对两者都比较陌生......
有没有一种方法可以将一个正在运行的Docker容器的IP地址和端口注入到另一个容器中?不涉及Docker Compose的方法?在OpenShift中应该如何正确地做到这一点?我知道那里的pod会将所有运行的pod的主机和端口作为环境变量获取(参见我的假想解决方案)。但是这些变量没有被解析,这并不能解决我的问题。
你们是如何进行这样的测试的?
1个回答

2
如果我理解正确,问题是关于如何在没有docker-compose的情况下连接两个Docker容器。实际上,docker-compose在这方面并没有增加太多内容-它只是自动化了几个步骤。
要连接容器,您需要:
  1. Create new user-defined bridge network (done once): docker network create foo

  2. Connect both containers to this network with --network=foo startup option

  3. Specify container names instead of autogenerated with --name=xyz

  4. Use these names instead of IP addressed in your connection strings.

    docker network create foo
    docker run -d --rm --name=my-database --network=foo <SQLServerImageName>
    docker run -d --rm --name=my-flyway --network=foo <FlyWayImageName>
    
现在您可以使用 server=my-database 从Flyway连接到SQL。"Original Answer"翻译成中文为"最初的回答"。

谢谢,这解决了方程式的一部分。另一个问题是使用环境变量将该名称导入Flyway。 - eerriicc
docker run -d --rm -e "SQL_SERVER=my-database" --name=my-flyway --network=foo <FlyWayImageName> - grapes
抱歉让你久等了...我用一个shell脚本测试了一切。看起来Flyway(我没有以分离模式启动它,因为这只是一次性的事情)无法看到网络:Flyway Community Edition 5.0.7 by Boxfuse 错误: 无法从数据库(jdbc:sqlserver://flyway:1433;databaseName=etrademark)获取连接,用户为'etrademark':TCP/IP连接到主机flyway,端口1433失败。错误:"flyway。请验证连接属性。确保SQL Server实例在主机上运行,并在端口上接受TCP/IP连接。" - eerriicc
你知道我怎么检查容器是否知道域名吗? - eerriicc
我的错误在于我使用了网络名称作为域名进行连接。我需要在我的JDBC连接字符串中使用Docker名称,例如my-database - eerriicc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接