【问题标题】:WebDriver container cannot access DockerComposeContainer servicesWebDriver 容器无法访问 DockerComposeContainer 服务
【发布时间】:2018-05-27 15:23:05
【问题描述】:

我正在尝试使用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);

但是,当我尝试通过 webdriver 访问该服务时,我收到了 Connection Refused 错误 - “localhost denied to connect”。

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



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

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

如何让 webdriver 访问宿主网络以访问暴露的服务?

【问题讨论】:

    标签: java spring integration-testing testcontainers


    【解决方案1】:

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

    1. 您可以使用映射的端口并通过 Docker 主机网络从 BrowserWebDriverContainer 访问主机(可能具有类似 172.0.0.1 的 ip)
    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注解,手动启动容器。

    【讨论】:

    • 使用 Docker 主机 IP 的解决方案 1 有效。在 Java 中找不到 environment.ambassadorContainers。
    • environment 是您的撰写容器的名称,在 Java 中您还需要调用 getAmbassadorContainers() 我假设。
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 2017-04-26
    • 2019-09-08
    • 1970-01-01
    • 2020-07-20
    • 2018-04-20
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多