TestContainers不会删除通过docker-compose.yml

时间:2019-05-11 17:12:26

标签: java testcontainers

我有多模块maven项目。在测试的每个模块中,我将TestContainersdocker-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();
    }
}

我的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"

每个模块中都有这个类和撰写文件。

但是,当使用命令在根目录上运行ALL测试时:

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

0 个答案:

没有答案