docker - 使用 docker compose 运行 Testcontainer 时的静态容器名称

标签 docker docker-compose testcontainers

我的应用程序由一个 Spring Boot 应用程序和一个数据库组成。我可以使用 docker-compose 在 Docker 中成功运行它们。我现在想使用类似的 Docker 组合文件和测试容器来编写一些自动化测试。我失败了,因为 Spring Boot 应用程序的 application.yml 文件中的主机名与分配给数据库容器的随机名称不匹配,因此该应用程序无法连接到数据库。

docker-compose

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
  • Mac 版 Docker:17.09.0-ce-mac35 (19611)

Docker 版本有点旧,但我认为这不是问题

最佳答案

容器名称在这里不重要,重要的是主机名,在您的情况下,这将是 apiapi-db。对于这个简单的用例,可能不需要自定义网络,您尝试过没有自定义网络吗?

关于docker - 使用 docker compose 运行 Testcontainer 时的静态容器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51773346/

相关文章:

docker - docker 上的 Grafana 设置 - 找不到配置文件

docker - 可以在 kubernetes 中将本地镜像用于 pod yaml 吗?

docker - 在Docker容器中运行React应用无法正常运行

docker - env_file在docker-compose中被忽略并导致 “The … variable is not set”警告

spring-boot - gradle连续构建技巧在docker容器中不起作用

docker - 使用 Apple Silicon M1 在 Docker 上运行 gem install bundler 时出现 Qemu 错误

java - Bitbucket 管道的测试容器问题

r - 带有 R 和 aws.s3 包的 AWS Lambda 和 S3

java - @SpringBootTest 需要数据库连接吗?

mysql - 如何使用 GenericContainer 配置 spring 数据源,该 GenericContainer 从自定义 MySQL Docker 镜像创建容器