如果 docker 网络不存在,Testcontainers 可以为我创建它吗?

Kir*_*ill 5 docker docker-networking docker-network testcontainers

看起来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。

我也可以使用--link但它已被弃用并且很快就会消失。这就是为什么我想知道 Testcontainers 是否可以为我创建一个 docker 网络。

使用命令行,我只需执行docker network create bridge2,然后我就可以像这样启动容器:

docker run -it --rm --net=bridge2 --name alpine1 alpine
docker run -it --rm --net=bridge2 --name alpine2 alpine
Run Code Online (Sandbox Code Playgroud)

nslookup alpine2alpine1容器中解析。

如果我尝试使用默认--net=bridge网络或跳过--net选项(实际上是相同的),则按名称引用将不起作用。

bsi*_*eup 7

是的,您可以使用 TestContainers 创建网络。我们很快就会记录下来,但它很简单:

首先,创建一个网络:

@Rule
public Network network = Network.newNetwork();
Run Code Online (Sandbox Code Playgroud)

然后,配置您的容器以加入它:

@Rule
public NginxContainer nginx = new NginxContainer<>()
        .withNetwork(network) // <--- Here
        .withNetworkAliases("nginx") // <--- "hostname" of this container
        .withCustomContent(contentFolder.toString());

@Rule
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer<>()
        .withNetwork(network) // <--- And here
        .withDesiredCapabilities(DesiredCapabilities.chrome());
Run Code Online (Sandbox Code Playgroud)

现在 Nginx 容器将对 Chrome 显示为“ http://nginx/ ”。

我们测试中的相同示例:https :
//github.com/testcontainers/testcontainers-java/blob/540f5672df90aa5233dde1dde7e8a9bc021c6e88/modules/selenium/src/test/java/org/testcontainers/junit/LinkedContainerTest.java#L