【问题标题】:Unable to run Springboot app using Selenium RemoteWebDriver with docker-compose无法使用 Selenium Remote WebDriver 和 docker-compose 运行 Spring Boot 应用程序
【发布时间】:2018-10-04 08:15:58
【问题描述】:

我正在容器化我的使用 selenium/standalone-firefox-debug 的 Spring Boot 应用程序,我已经创建了 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 应用程序中创建驱动程序的方式

RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());

【问题讨论】:

    标签: selenium docker spring-boot docker-compose


    【解决方案1】:

    问题

    这个http://localhost:4444/wd/hub URL 指的是属于容器运行时的本地主机。 springboot 容器没有运行端口 4444,这就是它抱怨的原因。

    解决方案

    您应该从它的主机名(不是本地主机)访问 selenium 服务。在 springboot 应用程序中,您可以使用 http://firefox:4444/wd/hub URL,您会很高兴。

    基本原理

    您在这里缺少容器中网络概念的核心。这两个镜像(即 springboot 和 selenium)都在容器内运行,因此它们有各自独立的环境。如果您在任何容器内引用本地主机,则表示该容器的本地主机。您期望 localhost 指代 docker 主机的 localhost。您在 docker 主机上暴露了端口 4444。因此,如果您尝试从 docker 主机运行您的 jar(而 selenium 是容器化的)localhost:4444 会起作用,但如果您从容器内部访问它,它就不会起作用。下图显示了这个概念:

    【讨论】:

    • 如何从 docker 主机运行 jar?在我的情景中
    • 假设您正在笔记本电脑上尝试此设置,只需在笔记本电脑上使用 java -jar app.jar 运行 springboot 应用程序并在容器中运行 selenium。
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2021-12-15
    • 2021-08-12
    • 2017-11-30
    • 2022-10-16
    • 1970-01-01
    • 2019-07-05
    • 2021-08-26
    相关资源
    最近更新 更多