You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm中Selenium Firefox节点主机变量配置及网络连通问题

解决Docker Swarm中Selenium Hub无法连接Firefox节点的网络问题

这个问题我之前在Swarm部署Selenium集群时也碰到过,核心原因就是Docker容器多网络环境下,Firefox节点默认用了非专用网络的内部IP(比如你提到的172.19.0.4)上报给Hub,但Hub在Selenium专用网络里访问不到这个IP,最终触发超时。我们可以通过配置节点的几个关键环境变量来解决,同时把节点主机设为可配置的变量。

核心解决方案:配置节点的上报地址

Selenium节点提供了三个关键环境变量来控制它向Hub上报的地址,我们需要正确设置这三个变量:

  • SE_NODE_HOST:节点的主机地址(Hub能访问到的IP或Swarm服务名)
  • SE_NODE_PORT:节点监听的端口
  • SE_NODE_REMOTE_HOST:节点上报给Hub的完整访问地址

1. 使用Swarm Stack部署(推荐)

创建一个docker-compose.yml文件,统一管理Hub和节点服务,确保两者在同一个专用网络内,同时配置节点的环境变量:

version: '3.8'

networks:
  selenium-net:
    driver: overlay
    attachable: true

services:
  selenium-hub:
    image: selenium/hub:latest
    ports:
      - "4444:4444"
    networks:
      - selenium-net
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

  firefox-node:
    image: selenium/node-firefox:latest
    environment:
      # 连接到Hub的事件总线
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      # 关键配置:指定节点的主机地址(用Swarm节点的内部IP)
      - SE_NODE_HOST={{.Node.InternalIP}}
      - SE_NODE_PORT=5555
      # 上报给Hub的完整地址,引用前面的变量保证一致性
      - SE_NODE_REMOTE_HOST=http://${SE_NODE_HOST}:${SE_NODE_PORT}
    networks:
      - selenium-net
    deploy:
      replicas: 3
      # 可选:如果需要固定节点到特定Swarm节点,添加constraints
      # placement:
      #   constraints: [node.hostname == swarm-node-1]

部署这个Stack到Swarm:

docker stack deploy -c docker-compose.yml selenium-cluster

2. 命令行单独创建节点服务

如果需要单独创建Firefox节点服务,用以下命令(替换selenium-net为你的专用网络名称):

# 获取当前Swarm节点的内部IP
NODE_IP=$(docker node inspect self --format '{{.Status.Addr}}')

docker service create \
  --name firefox-node \
  --network selenium-net \
  --env SE_EVENT_BUS_HOST=selenium-hub \
  --env SE_EVENT_BUS_PUBLISH_PORT=4442 \
  --env SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
  --env SE_NODE_HOST=$NODE_IP \
  --env SE_NODE_PORT=5555 \
  --env SE_NODE_REMOTE_HOST=http://$NODE_IP:5555 \
  selenium/node-firefox:latest

关键参数说明

  • {{.Node.InternalIP}}:Swarm的模板变量,自动获取节点的内部IP(也就是你提到的10.0.1.19这类地址),Hub在专用网络内可以直接访问这个IP。
  • 也可以用Swarm服务名firefox-node作为SE_NODE_HOST的值,因为Swarm的内部DNS会自动解析服务名到正确的网络IP,这种方式更灵活,适合动态扩缩容的场景。
  • 确保Hub和所有节点都加入同一个selenium-net网络,避免跨网络的访问问题。

验证解决方案

部署完成后,访问Selenium Hub的控制台:http://<hub-ip>:4444/ui,查看已注册的Firefox节点的地址是否是你指定的10.0.1.x地址或服务名。如果显示正确,就可以运行测试脚本验证Hub是否能正常调用节点执行测试。

内容的提问来源于stack exchange,提问作者koras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:33:41