私のアプリケーションは、Spring Boot アプリとデータベースで構成されています。docker-compose を使用して、Docker でそれらを正常に実行できます。同様の Docker 構成ファイルと testcontainers を使用して、自動化されたテストを作成したいと考えています。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
my_network を使用するのではなく、ランダムなネットワーク名 (wtdopq2hneev) を割り当てているように見えるという事実は、最終的には私の問題です。
docker-compose.yml ファイルでコンテナーの名前を指定できますが、テストから API を呼び出すために必要なサービスを「公開」することはできません。
私はこれについて間違った方法で行っていますか?
- Java バージョン: 1.8.0_144
- テストコンテナのバージョン: 1.8.3
- Docker for Mac バージョン: 17.09.0-ce-mac35 (19611)
Dockerのバージョンは少し古いですが、それは問題ではないと思います