gpt4 book ai didi

java - WebDriver容器无法访问DockerComposeContainer服务

转载 作者:行者123 更新时间:2023-11-30 02:17:41 28 4
gpt4 key购买 nike

我正在尝试使用 testcontainers java 库来测试使用 docker-compose 定义的 Web 应用程序。

我可以成功地从 DockerComposeContainer 公开服务并使用 RestTemplate 查询它们。

    String url = format(
"http://%s:%s",
environment.getServiceHost("web_1", 8080),
environment.getServicePort("web_1", 8080)
);

ResponseEntity<String> response = template.getForEntity(url, String.class);

但是,当我尝试通过网络驱动程序访问该服务时,我收到“连接被拒绝”错误 - “localhost 拒绝连接”。

@Rule
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
.withDesiredCapabilities(DesiredCapabilities.chrome());



RemoteWebDriver driver = chrome.getWebDriver();
driver.get(url);

我认为 webdriver 'localhost' 仍然是其容器内的 localhost,而不是公开服务的主机。

如何让 webdriver 访问主机网络以访问公开的服务?

最佳答案

您正在构建的 URL 用于从主机系统访问容器(因此它将使用本地主机和映射端口)。对于 BrowserWebDriverContainer,这意味着 localhost 将无法工作。有两种选择:

  1. 您可以使用映射的端口并通过 Docker 主机网络(可能具有 172.0.0.1 等 IP)从 BrowserWebDriverContainer 访问主机
  2. 您可以使用 Docker 网络将容器相互连接。

Testcontainers 最近引入了 Docker Network 支持,但 Docker-Compose 容器仍然缺乏此功能 ATM。

但是,您可以像这样手动连接它们(对 Groovy 代码示例感到抱歉,但我认为该方法很清楚):

String network = findNetworkIdOfService("vote")
chrome.withNetworkMode(network)

private String findNetworkIdOfService(String service) {
environment.ambassadorContainers.find {
it.key.contains(service)
}.value.containerInfo.networkSettings.networks.values().first().networkID
}

您还需要省略@Rule注释并手动启动容器。

关于java - WebDriver容器无法访问DockerComposeContainer服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47798074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com