Статическое имя контейнера при запуске Testcontainers с помощью docker compose

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

докер-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");

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
  • Тестконтейнеры версия: 1.8.3
  • Версия Docker для Mac: 17.09.0-ce-mac35 (19611)

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

1 ответ

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

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

services:
  redis:
    image: redis:alpine
    container_name: whatever-you-fancy
Другие вопросы по тегам