0

docker-compose ファイルは次のとおりです。

  app:
    image: myimage
    depends_on:
      - nsqd
      - localstack
    command: ["run.sh"]
    environment:
      - "DYNAMODB=http://localstack:4569"
    ports:
      - 8080:8080

  nsqd:
    image: nsqio/nsq
    command: /run
    ports:
      - "4150:4150"
      - "4151:4151"

  localstack:
    image: localstack/localstack:latest
    ports:
      - 4569:4569
    environment:
      SERVICES: dynamodb
      DATA_DIR: /tmp/localstack/data
      HOSTNAME: localstack

この構成ファイルは、テスト メソッドが実行される前に Java JUnit テストで実行されます。

  @Before
  public void setUp() throws Exception {
        new DockerComposeContainer(new File("docker-compose.yaml"))
                .withExposedService("nsqd", 4150, Wait.forListeningPort())
                .withExposedService("localstack", 4569, Wait.forListeningPort())
                .withExposedService("app", 8080, Wait.forListeningPort())
                .start();
  }

すべてのテスト メソッドを 1 つずつ実行すると、まったく問題はありません。しかし、同時に2つ以上のテストを実行しようとすると、次のようなエラーが発生しました:

ERROR: for localstack  Cannot start service localstack: driver failed programming external connectivity on endpoint hwfdrbmwpwn1_localstack_1 (e33d2a3098e74b1b8d87e3e595d9d9504ccddd4fe9c0605b20ebd3f22f50daa5): Bind for 0.0.0.0:4569 failed: port is already allocated
ERROR: for nsqlookupd  Cannot start service nsqlookupd: driver failed programming external connectivity on endpoint hwfdrbmwpwn1_nsqlookupd_1 (fe62cec02a23a184d65b3f02776a14d77fdfbe639645ea0a11e07e8f11010e37): Bind for 0.0.0.0:4161 failed: port is already allocated

そしてそれらのポートは機能とは異なりwithExposedServiceます。反対側からは、構成ファイルからのすべてのサービスが分離されたネットワークで開始されたため、競合は発生しないはずですが、競合は存在します。ポートで何が起こっているのか説明できる人はいますか? docker-compose サービスを複数回同時に実行するために testcontainers に提供する必要がある追加の構成は何ですか?

4

2 に答える 2