如何使用带有测试容器的现有网络?

How to use an existent network with testcontainers?

我有一个测试将 运行 在已经有外部 docker 网络的环境中使用一些受控容器。

如何让我的测试容器连接到所述网络?

我尝试了下面的代码但没有成功:

        public  static final GenericContainer tcpController;
        static  {
            Network network = Network.builder().id("existent-external-network").build();
            tcpController = new GenericContainer("tcp_controller:0.0.1")
                    .withExposedPorts(3005)
                    .withEnv("TCP_PORT", "3005")
                    .withNetwork(network);

            tcpController.start();
        }

本质上我想做的相当于下面的 docker-compose

version: "3.4"
services:
  machine:
    image: tcp_controller:0.0.1
    environment:
      - TCP_PORT=3005
networks:
  default:
    external:
      name: existent-external-network

编辑 1:

维塔利的建议奏效了。

这是我实际使用他的建议和 docs

所做的

考虑 TcpHandler 只是一个 class 需要 IP 和端口


    public static final DockerComposeContainer compose;

    static {
        compose = new DockerComposeContainer(
                new File("src/test/java/docker-compose.yml")
        )
                .withExposedService("machine", 3005)
                .withLocalCompose(true);
        compose.start();
    }

    @BeforeAll
    static void setup() throws IOException, TimeoutException {

        settings = Settings.getInstance();
        // We need to get the actual host and port using service name
        settings.tcpURL = compose.getServiceHost("machine", 3005);
        settings.tcpPort = compose.getServicePort("machine", 3005);
        tcp = new TCPHandler(settings.tcpURL, settings.tcpPort);
        tcp.start();

    }

Fabio,不确定您是否尝试过 - 将 docker 与本地撰写一起使用对您有用吗?喜欢:

@Container
public static DockerComposeContainer docker = new DockerComposeContainer(
        new File("src/test/resources/compose-mysql-test.yml")
)
        .withLocalCompose(true);