我的应用程序包含一个Spring Boot应用程序和一个数据库。我可以使用docker-compose在Docker中成功运行它们。我现在想与testcontainer一起使用类似的Docker compose文件来编写一些自动化测试。我失败了,因为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");
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:< / p>
我会以错误的方式处理吗?
Docker版本有点旧,但我不认为这是问题
答案 0 :(得分:0)
只需设置一个容器名称,便会知道:
services:
redis:
image: redis:alpine
container_name: whatever-you-fancy
答案 1 :(得分:0)
容器名称在这里无关紧要,重要的是主机名,在您的情况下,这将是api
和api-db
。对于这种简单的用例,可能不需要自定义网络,您是否尝试过不使用它?