我正在使用我的春季启动应用程序,它使用selenium / standalone-firefox-debug我创建了docker compose文件,但是当我向上它时它会给我错误
无法启动新会话。可能的原因是远程服务器的无效地址或浏览器启动失败。
但是,如果我直接运行spring-boot应用程序并且selenium / standalone-firefox-debug单独运行它。我想用docker-compose运行它
Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT exec java -jar /app.jar
Dockercompose:
version: '2.2'
services:
employer-url:
image: "adib/employer-url"
ports:
- "8080:8080"
depends_on:
- firefox
firefox:
image: "selenium/standalone-firefox-debug"
ports:
- "4444:4444"
environment:
- no_proxy=localhost
这就是我在spring app中创建驱动程序的方法
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());
答案 0 :(得分:1)
此http://localhost:4444/wd/hub
URL指的是属于容器运行时的localhost。 springboot容器没有端口4444运行,这就是为什么它会抱怨。
您应该从其主机名(而不是localhost)访问selenium服务。在springboot应用程序中,您可以使用http://firefox:4444/wd/hub
URL,并且您可以继续使用。
您在这里忽略了容器中网络概念的核心。这两个图像(即springboot和selenium)都在容器内运行,因此它们具有独立的环境。如果在任何容器中引用localhost,则表示该容器的localhost。您希望localhost引用docker主机的localhost。您在docker主机上公开了端口4444。因此,如果您尝试从docker主机运行jar(虽然selenium是容器化的)localhost:4444
可以工作,但如果您从容器内部访问它,它将无法工作。下图显示了这个概念: