如何使用带有测试容器的现有网络?
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);
我有一个测试将 运行 在已经有外部 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);