如何为Selenium Grid配置Nomad作业

问题描述

我正在尝试在Hashicorp Nomad中设置一个Selenium Grid,但我不知道如何使网络正常工作。 我想要的是拥有一个硒集线器和8个铬节点。我发现,如果将节点任务放入自己的组中,则只能有多个节点任务分配。

在本地运行它,我将像这样启动网格:

docker network create grid
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -v /dev/shm:/dev/shm selenium/node-chrome:4
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -v /dev/shm:/dev/shm selenium/node-chrome:4
...

我需要如何配置网络才能使其正常工作?

我当前的工作是这样的:

job "selenium" {
  datacenters = ["dc1"]
  type = "service"
  group "selenium_hub" {
    network {

    }
    task "selenium_hub" {
      driver = "docker"
      config {
        image = "selenium/hub:4"
      }
    }
  }
  group "selenium_nodes" {
    count = 8
    network {

    }
    task "selenium_node" {
      driver = "docker"
      env {
        SE_EVENT_BUS_HOST = "selenium-hub"
        SE_EVENT_BUS_PUBLISH_PORT = "4442"
        SE_EVENT_BUS_SUBSCRIBE_PORT = "4443"
      }
      config {
        image = "selenium/node-chrome:4"
      }
    }
  }  
}

解决方法

如果有人遇到这个问题,我会像这样工作:

job "selenium" { 
  datacenters = ["dc1"]
  type = "service"
  group "selenium_hub" {
    network {
      mode = "host"
    }
    task "selenium_hub" {
      driver = "docker"
      config {
        image = "selenium/hub:3.141.59-20201010"
        network_mode = "host"
      }
    }
  }
  group "selenium_nodes" {
    count = 8
    network {
        mode = "host"
        port "http" {}
    }
    task "selenium_node" {
      driver = "docker"
      env {
        HUB_HOST = "localhost"
        SE_OPTS = "-port ${NOMAD_PORT_http}"
      }
      config {
        network_mode = "host"
        image = "selenium/node-chrome:3.141.59-20201010"
      }
    }
  }  
}

我用硒3代替了硒4,因为我们还有硒4的其他问题。 由于我使用了主机网络,并且所有节点都使用端口5555,因此我需要通过SE_OPTS环境变量将动态端口(http)传递到Selenium。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...