簡體   English   中英

WebDriver容器無法訪問DockerComposeContainer服務

[英]WebDriver container cannot access DockerComposeContainer services

我正在嘗試使用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);

但是,當我嘗試通過網絡驅動程序訪問服務時,出現“拒絕連接”錯誤-“本地主機拒絕連接”。

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



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

我認為webdriver'localhost'仍是其容器內的localhost,而不是公開服務的主機。

如何使webdriver訪問主機網絡以訪問公開的服務?

所建立的URL用於從主機系統訪問容器(因此它將使用localhost和映射的端口)。 如果使用BrowserWebDriverContainer ,則意味着localhost將無法工作。 有兩種選擇:

  1. 您可以使用映射的端口,並通過Docker主機網絡(可能具有一個IP,例如172.0.0.1)從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批注並手動啟動容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM