无法使用带有docker-compose的Selenium RemoteWebDriver运行Springboot应用程序

时间:2018-04-24 07:08:12

标签: selenium docker spring-boot docker-compose

我正在使用我的春季启动应用程序,它使用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());

1 个答案:

答案 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可以工作,但如果您从容器内部访问它,它将无法工作。下图显示了这个概念:

docker network