我的 AUT 在 docker 容器中运行,它的 URL 是 "http://localhost:8080/" 。现在,当我使用 Zalenium 触发测试时,它会启动浏览器,但是当它尝试导航到 AUT 的 URL 时却找不到它。是不是因为我的 AUT 在 docker 容器中运行,而 Zalenium 也在单独的 docker 容器中运行,并且它们都无法相互通信?
提前致谢。
我的 AUT 在 docker 容器中运行,它的 URL 是 "http://localhost:8080/" 。现在,当我使用 Zalenium 触发测试时,它会启动浏览器,但是当它尝试导航到 AUT 的 URL 时却找不到它。是不是因为我的 AUT 在 docker 容器中运行,而 Zalenium 也在单独的 docker 容器中运行,并且它们都无法相互通信?
提前致谢。
我认为这就是它应该如何工作的方式。理想情况下,您希望包含隔离,直到您另有说明。
一个快速的解决方案,在你的 selenium 脚本上,而不是localhost
指定你的<machine name>
. 这样,您在 zalenium 中的脚本将寻求通过网络(仍然是您)解析地址,而不是尝试在自己的网络环上内部解析 localhost。
虽然这可能适用于您的机器,但它有点静态。您可能希望将其作为解决方案的一部分编写脚本,以便连接到多个。
在java中,您可以使用它来获取正在运行的机器名称:
InetAddress addr;
addr = InetAddress.getLocalHost();
hostname = addr.getHostName();
或者,要制作更便携的解决方案,您可能需要查看docker 网络页面。
我认为本教程可能会对您有所帮助。“使用独立容器联网”听起来是对的。
总而言之,当您运行 docker 容器时,您需要将它们附加到同一个网络。默认值为:
--network bridge
或者创建自己的桥梁:
docker network create --driver bridge MyBridgeName
并在该桥名称上运行两个容器:
docker run -dit --name MyImageName --network MyBridgeName ImageToRun
docker run -dit --name OtherName --network MyBridgeName OtherImageToRun