Статическое имя контейнера при запуске 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