【问题标题】:How to change port of selenium/hub docker container?如何更改 selenium/hub docker 容器的端口?
【发布时间】:2018-11-30 03:44:23
【问题描述】:

我正在使用 Docker 容器执行自动化测试。我必须在同一台服务器上为多个应用程序运行测试套件。但是,如果我对每个 selenium hub docker 容器都有相同的端口,那么我不能同时运行所有这些套件。因此,我想为每个 selenium/hub docker 容器分配不同的端口。有什么办法可以更改集线器容器的端口吗?还是我需要编写自己的 dockerfile 而不使用 selenium/hub docker 镜像?

我的 docker-compose 文件是这样的

version: "3"
services:
  selenium-hub:
    restart: always
    image: selenium/hub:latest
    ports:
      - "4444:4444"
    environment:
      - GRID_BROWSER_TIMEOUT=300
      - GRID_TIMEOUT=300
selenium-chrome:
  restart: always
  image: selenium/node-chrome:latest
  depends_on:
    - selenium-hub
  volumes:
    - /dev/shm:/dev/shm
  links:
    - selenium-hub:hub
  environment:
    - HUB_PORT_4444_TCP_ADDR=selenium-hub
    - HUB_PORT_4444_TCP_PORT=4444
    - JAVA_OPT=-Xmx512m
    - DBUS_SESSION_BUS_ADDRESS=/dev/null
    - no_proxy=localhost
    - HUB_ENV_no_proxy=localhost
    - GRID_BROWSER_TIMEOUT=300
    - GRID_TIMEOUT=300
selenium-firefox:
  restart: always
  image: selenium/node-firefox:latest
  depends_on:
    - selenium-hub
  volumes:
    - /dev/shm:/dev/shm
  links:
    - selenium-hub:hub
  environment:
    - HUB_PORT_4444_TCP_ADDR=selenium-hub
    - HUB_PORT_4444_TCP_PORT=4444
    - JAVA_OPT=-Xmx512m
    - DBUS_SESSION_BUS_ADDRESS=/dev/null
    - no_proxy=localhost
    - HUB_ENV_no_proxy=localhost
    - GRID_BROWSER_TIMEOUT=300
    - GRID_TIMEOUT=300

【问题讨论】:

  • 为什么端口是成对的?端口:-“4444:4444”

标签: selenium docker docker-compose automated-tests selenium-grid


【解决方案1】:

您可以使用SE_OPTS 环境变量更改端口:只需添加

environment:
  SE_OPTS: "-port <YOUR_PREFERED_PORT>"

到您的docker-compose.yml,Selenium 将从&lt;YOUR_PREFERED_PORT&gt; 开始。

https://github.com/SeleniumHQ/docker-selenium#se_opts-selenium-configuration-options

【讨论】:

    【解决方案2】:

    根据Dockerfilehttps://github.com/SeleniumHQ/docker-selenium/blob/master/Hub/Dockerfile可以设置GRID_HUB_PORT

        environment:
          GRID_HUB_PORT: "4545"
    

    【讨论】:

      【解决方案3】:

      只需使用您要使用的任何端口查找并替换 4444。例如,使用 4440 而不是 4444。

      version: "3"
      services:
        selenium-hub:
          restart: always
          image: selenium/hub:latest
          ports:
            - "4440:4440"
          environment:
            - GRID_BROWSER_TIMEOUT=300
            - GRID_TIMEOUT=300
      selenium-chrome:
        restart: always
        image: selenium/node-chrome:latest
        depends_on:
          - selenium-hub
        volumes:
          - /dev/shm:/dev/shm
        links:
          - selenium-hub:hub
        environment:
          - HUB_PORT_4440_TCP_ADDR=selenium-hub
          - HUB_PORT_4440_TCP_PORT=4440
          - JAVA_OPT=-Xmx512m
          - DBUS_SESSION_BUS_ADDRESS=/dev/null
          - no_proxy=localhost
          - HUB_ENV_no_proxy=localhost
          - GRID_BROWSER_TIMEOUT=300
          - GRID_TIMEOUT=300
      selenium-firefox:
        restart: always
        image: selenium/node-firefox:latest
        depends_on:
          - selenium-hub
        volumes:
          - /dev/shm:/dev/shm
        links:
          - selenium-hub:hub
        environment:
          - HUB_PORT_4440_TCP_ADDR=selenium-hub
          - HUB_PORT_4440_TCP_PORT=4440
          - JAVA_OPT=-Xmx512m
          - DBUS_SESSION_BUS_ADDRESS=/dev/null
          - no_proxy=localhost
          - HUB_ENV_no_proxy=localhost
          - GRID_BROWSER_TIMEOUT=300
          - GRID_TIMEOUT=300
      

      【讨论】:

        【解决方案4】:

        我曾经在同一台 Jenkins 机器上对两个不同的 Web 应用程序进行自动化 selenium 测试。我需要在同一台机器上设置和运行 2 个硒网格,每个网格都使用独特且不同的端口。我没有为集线器和节点创建自己的 docker 映像,而是将第二个 selenium 网格的 docker compose 文件更改为以下内容:

        
        version: "3.5"
        services:
        
          hub:
            image: selenium/hub
            container_name: selenium_hub_nia
            ports:
              - "3333:4444"
            networks:
              - nia_bridge
        
            environment:
              GRID_MAX_SESSION: 16
              GRID_BROWSER_TIMEOUT: 10000
              GRID_TIMEOUT: 10000
              GRID_HUB_PORT: 3333
            expose:
              - "3333"
        
          chrome:
            image: selenium/node-chrome
            container_name: selenium_node_nia_chrome
            depends_on:
              - hub
            environment:
              - HUB_PORT_4444_TCP_ADDR=hub
              - HUB_PORT_4444_TCP_PORT=3333
              - NODE_MAX_SESSION=4
              - NODE_MAX_INSTANCES=4
            volumes:
              - /dev/shm:/dev/shm
            ports:
              - "9003:5900"
            links:
              - hub
            networks:
              - nia_bridge
        
          firefox:
            image: selenium/node-firefox-debug
            container_name: selenium_node_nia_firefox
            depends_on:
              - hub
            environment:
              - HUB_PORT_4444_TCP_ADDR=hub
              - HUB_PORT_4444_TCP_PORT=3333
              - NODE_MAX_SESSION=4
              - NODE_MAX_INSTANCES=4
            volumes:
              - /dev/shm:/dev/shm
            ports:
              - "9004:5900"
            links:
              - hub
            networks:
              - nia_bridge
        networks:
            nia_bridge: {}
        

        上述文件的三大变化:

        1. 在集线器定义中:
          我首先将第二个 selenium hub 容器的端口 4444 映射到主机(Jenkins 服务器)端口 3333(第一个 hub 继续在 4444 上运行)。这解决了第一个 selenium hub 容器运行时已经绑定 4444 的错误。 我还将其 GRID_HUB_PORT 定义为 3333,并将该端口暴露给名为 nia-bridge 的网桥上的容器。
        2. 在我的 2 个节点(chrome 和 firefox)的两个服务中,我将 HUB_PORT_4444_TCP_PORT 指定为 3333,因此它们使用正确的 url 注册到集线器。
        3. 这个 docker compose 文件启动了 3 个容器。我使容器名称独一无二,即不同于您可能已经为您的其他 Web 应用程序拥有的预先存在的 selenium 网格网络。这是必需的,因为 docker 容器名称必须是唯一的。 以上帮助我创建了一个完全不同的 selenium 网格,集线器和 2 个节点分别在主机 Jenkins 服务器的端口 3333,9003,9004 上运行。

        【讨论】:

          猜你喜欢
          • 2019-01-12
          • 1970-01-01
          • 1970-01-01
          • 2019-12-31
          • 2021-02-20
          • 1970-01-01
          • 2023-03-12
          • 2019-02-13
          • 1970-01-01
          相关资源
          最近更新 更多