3

私のアプリケーションは、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のバージョンは少し古いですが、それは問題ではないと思います

4

2 に答える 2