如果 docker 网络不存在,Testcontainers 可以为我创建吗?
Can Testcontainers create docker network for me if it does not exist?
看来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。
我也可以使用 --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
并从 alpine1
容器解析 nslookup alpine2
。
如果我尝试使用默认 --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/”。
看来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。
我也可以使用 --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
并从 alpine1
容器解析 nslookup alpine2
。
如果我尝试使用默认 --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/”。