Имя статического контейнера при запуске Testcontainers с docker compose

Мое приложение состоит из приложения Spring Boot и базы данных. Я могу успешно запустить их в Docker с помощью docker-compose. Теперь я хочу использовать аналогичный файл компоновки Docker вместе с testcontainers для написания некоторых автоматических тестов. Я терплю неудачу, потому что имя хоста в файле application.yml приложения Spring Boot не соответствует случайному имени, присвоенному контейнеру базы данных, и поэтому приложение не может подключиться к базе данных.

докер-сочинять

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");

application.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
  • Версия Testcontainers: 1.8.3
  • Докер для Mac версии: 17.09.0-ce-mac35 (19611)

Версия Docker немного устарела, но я не думаю, что это проблема


person s1mm0t    schedule 09.08.2018    source источник


Ответы (2)


Просто задайте имя контейнера, и тогда вы его узнаете:

services:
  redis:
    image: redis:alpine
    container_name: whatever-you-fancy
person Daisy Day    schedule 09.08.2018
comment
Да, я упомянул в своем вопросе, что могу сделать то, что решит проблему с подключением к базе данных, но как мне тогда «раскрыть» базу данных? Я хочу провести тестирование серого ящика, поэтому хочу иметь возможность запрашивать базу данных. Я описал простой пример, но в реальном мире есть больше сервисов, которым необходимо подключаться друг к другу, но в то же время я захочу подключиться к ним из моих тестов, - person s1mm0t; 10.08.2018
comment
установка container_name при использовании testcontainers приводит к ошибке. - person Johannes; 28.08.2020

Имя контейнера здесь не имеет значения, важно имя хоста, и в вашем случае это будут api и api-db. Для этого простого варианта использования, вероятно, нет необходимости в настраиваемой сети, пробовали ли вы это без нее?

person Yanick Nedderhoff    schedule 17.01.2019