如何获取Selenium Grid节点ID与Docker noVNC端口的映射关系
解决Selenium节点ID与noVNC端口映射的关联问题
以下是几种实用方法,帮你精准匹配节点ID对应的宿主机noVNC端口:
方法一:通过Docker命令行关联节点IP与端口
Selenium Grid /status 接口返回的节点ID包含容器内部IP(比如http://172.18.0.3:5555),你可以通过Docker命令把这个内部IP和宿主机的790x端口对应起来:
- 执行以下命令,列出所有Edge节点的内部IP和对应的宿主机noVNC端口:
for container in $(docker-compose ps -q edge); do node_ip=$(docker inspect -f '{{.NetworkSettings.IPAddress}}' $container) novnc_port=$(docker inspect -f '{{(index .NetworkSettings.Ports "7900/tcp" 0).HostPort}}' $container) echo "节点内部IP: $node_ip → 宿主机noVNC端口: $novnc_port" done
- 从
/status接口中找到目标会话对应的节点ID,提取内部IP,和上面输出的结果匹配,就能直接得到对应的790x端口。
如果你想快速查看所有Edge节点的端口映射,也可以直接运行:
docker-compose ps edge
输出会显示每个容器的端口映射关系,比如:
Name Command State Ports --------------------------------------------------------------------------------------------------------- selenium-edge-1 /opt/bin/entry_point.sh Up 5555/tcp, 0.0.0.0:7901->7900/tcp selenium-edge-2 /opt/bin/entry_point.sh Up 5555/tcp, 0.0.0.0:7902->7900/tcp selenium-edge-3 /opt/bin/entry_point.sh Up 5555/tcp, 0.0.0.0:7903->7900/tcp
再通过容器名查询内部IP,关联到节点ID即可:
docker inspect -f '{{.NetworkSettings.IPAddress}}' selenium-edge-1
方法二:固定节点端口(适合固定数量的节点)
如果不需要动态缩放节点,或者可以提前规划端口,修改Docker Compose配置,给每个节点单独分配固定端口,这样节点ID和端口的对应关系一目了然:
version: "3" services: edge1: image: selenium/node-edge:latest shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 - SE_NODE_MAX_INSTANCES=1 - SE_NODE_MAX_SESSIONS=1 - SE_VNC_NO_PASSWORD=1 - SE_NODE_SESSION_TIMEOUT=60 ports: - "7901:7900" edge2: image: selenium/node-edge:latest shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 - SE_NODE_MAX_INSTANCES=1 - SE_NODE_MAX_SESSIONS=1 - SE_VNC_NO_PASSWORD=1 - SE_NODE_SESSION_TIMEOUT=60 ports: - "7902:7900" edge3: image: selenium/node-edge:latest shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 - SE_NODE_MAX_INSTANCES=1 - SE_NODE_MAX_SESSIONS=1 - SE_VNC_NO_PASSWORD=1 - SE_NODE_SESSION_TIMEOUT=60 ports: - "7903:7900" selenium-hub: image: selenium/hub:latest container_name: selenium-hub ports: - "4442:4442" - "4443:4443" - "4444:4444"
启动后,每个节点的容器名对应edge1/edge2/edge3,直接对应7901/7902/7903端口,无需额外查询。
方法三:尝试通过会话详情接口获取信息
部分Selenium Grid版本支持通过会话详情接口获取节点更多信息,调用:
GET http://localhost:4444/wd/hub/session/<会话ID>
查看返回的capabilities或node字段,可能包含节点的端口相关信息,但该方法兼容性依赖Grid版本,不如前两种方法可靠。
内容的提问来源于stack exchange,提问作者Nilanjan Mandal
相关产品推荐
相关产品推荐

