如果不存在,Testcontainers 可以为我创建 docker 网络吗?
Posted
技术标签:
【中文标题】如果不存在,Testcontainers 可以为我创建 docker 网络吗?【英文标题】:Can Testcontainers create docker network for me if it does not exist? 【发布时间】:2018-03-14 20:43:43 【问题描述】:看起来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。
我也可以使用--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
选项(实际上是相同的),按名称引用将不起作用。
【问题讨论】:
你可以选择 docker-compose 吗? @YannicHamann 不,因为看起来像 Testcontaiers compose 我只能使用暴露的端口并且不能执行任意命令。 compose 有很多限制。 【参考方案1】:是的,您可以使用 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
【讨论】:
酷,这正是我对 Testcontainers 发布这个问题的期望:)以上是关于如果不存在,Testcontainers 可以为我创建 docker 网络吗?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Testcontainers R2DBC 中初始化模式?
带有 Kotlin、TestContainers 和外部配置的 SpringBootTest
如何解决 Spring Boot 上的 org.testcontainers.containers.ContainerFetchException?