[英]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將無法工作。 有兩種選擇:
BrowserWebDriverContainer
訪問主機。 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.