我的应用程序由一个 Spring Boot 应用程序和一个数据库组成。我可以使用 docker-compose 在 Docker 中成功运行它们。我现在想使用一个类似的 Docker compose 文件和 testcontainers 来编写一些自动化测试。我失败了,因为 Spring Boot 应用程序的 application.yml 文件中的主机名与分配给数据库容器的随机名称不匹配,因此应用程序无法连接到数据库。
码头工人撰写
version: '2'
services:
api:
image: simon/api:1.0.0-SNAPSHOT
networks:
- my_network
api-db:
image: simon/api-db:1.0.0-SNAPSHOT
networks:
- my_network
networks:
my_network:
external: false
班级规则设置
@ClassRule public static DockerComposeContainer<?> dockerEnvironment =
new DockerComposeContainer<>(new File("docker-compose.yml"))
.withPull(false)
.withLocalCompose(true)
.withExposedService("api", "8080");
应用程序.yml
spring:
profiles: docker
datasource:
url: jdbc:postgresql://api-db:5432/api
测试运行时,将为容器分配名称,例如:
wtdopq2hneev_api_1 wtdopq2hneev_api-db_1
事实上,它似乎是在分配一个随机网络名称 (wtdopq2hneev) 而不是使用 my_network,这最终是我的问题。
我可以在 docker-compose.yml 文件中指定容器的名称,但是我不能“公开”我需要的服务,以便我可以从我的测试中调用我的 API:
我会以错误的方式解决这个问题吗?
- Java版本:1.8.0_144
- 测试容器版本:1.8.3
- Docker for Mac 版本:17.09.0-ce-mac35 (19611)
Docker 版本有点旧,但我认为这不是问题