У меня есть многомодульный 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