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

我也可以使用--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

并从nslookup alpine2容器解析alpine1

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

最佳答案

是的,您可以使用TestContainers创建网络。我们将尽快对其进行记录,但是它很简单:

首先,创建一个网络:

@Rule
public Network network = Network.newNetwork();

然后,配置您的容器以加入它:
@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());

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

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

关于docker - 如果不存在,Testcontainers可以为我创建docker网络吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46548199/

10-16 17:02