TestContainers не удаляют сеть, созданную с помощью docker-compose.yml - PullRequest
0 голосов
/ 11 мая 2019

У меня есть многомодульный maven проект.В каждом модуле в тестах я использую TestContainers с docker-compose.Я создал абстрактный класс со статическим блоком:

public abstract class AbstractIntegrationTest {

   static final String MANAGEMENT_NODE_SERVICE_NAME = "ndb_mgmd";

   static final int CLUSTERJ_NDB_PORT = 1186;

   static final String MYSQL_NODE_SERVICE_NAME = "ndb_mysqld";

   static final int MYSQL_PORT = 3306;

   private static DockerComposeContainer dockerComposeContainer =
            new DockerComposeContainer(
                    new File("src/test/resources/docker-compose.yml"))
                    .withLocalCompose(true)
                    .withExposedService(MANAGEMENT_NODE_SERVICE_NAME, CLUSTERJ_NDB_PORT)
                    .withExposedService(MYSQL_NODE_SERVICE_NAME, MYSQL_PORT);

    static {
        dockerComposeContainer.start();
    }
}

My docker-compose.yml:

version: "3"

services:
  ndb_mgmd:
    image: mysql/mysql-cluster
    command: 'ndb_mgmd'
    volumes:
      - ./mysql-cluster.cnf:/etc/mysql-cluster.cnf
    networks:
      cluster:
        ipv4_address: 192.168.0.2

  ndb_data_node_1:
    image: mysql/mysql-cluster
    command: 'ndbd'
    depends_on:
      - ndb_mgmd
    networks:
      cluster:
        ipv4_address: 192.168.0.3

  ndb_mysqld:
    image: mysql/mysql-cluster
    command: 'mysqld'
    environment:
      - MYSQL_DATABASE=TEST
      - MYSQL_USER=sys
      - MYSQL_PASSWORD=qwerty
    depends_on:
      - ndb_mgmd
      - ndb_data_node_1
    networks:
      cluster:
        ipv4_address: 192.168.0.10

networks:
  cluster:
    ipam:
      driver: default
      config:
        - subnet: "192.168.0.0/16"

Этот класс и файл составления у меня есть в каждом модуле.

Но,Когда все тесты запускаются в корневом каталоге с помощью команды:

mvn test

, я вижу, что тесты в первом случайном модуле прошли успешно.Но когда тесты запускаются в следующем модуле, я получаю сообщение об ошибке:

[Thread-3] ERROR ? [docker-compose] - Pool overlaps with other one on this address space

Это произошло из-за того, что созданная подсеть не была удалена после завершения тестов первого модуля.Я вижу:

docker network ls
NETWORK ID          NAME                                   DRIVER              SCOPE           local
3c39948c8304        e1btqscnwrwu_cluster                   bridge              local
9403e1c079b8        host                                   host                local
238981608b58        none                                   null                local
bf4cc57f9d5a        scdf_default                           bridge              local

Сеть с именем e1btqscnwrwu_cluster существует!Но почему?

Таким образом, испытания первого модуля успешно пройдены, а все остальные выпали.Не могу понять, почему сеть не удаляла после тестов первого модуля?Существуют ли "лучшие практики" по использованию TestContainers в многомодульном проекте?

У меня есть:

TestContainers 1.11.2
docker-compose version 1.24.0, build 0aa59064
Docker version 18.09.0, build 4d60db4
...