Мое приложение состоит из приложения 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 немного устарела, но я не думаю, что это проблема