如何通过Docker Compose在两台机器搭建Selenium Grid并实现跨机节点接入
解决跨机器连接Selenium Grid Hub与Node的问题
首先,你本地用Docker Compose轻松扩容节点没问题,是因为所有容器都在同一台机器的Docker内网里,但跨机器部署的核心是让第二台机器的Node容器能精准访问到Hub所在机器的IP和端口,下面是经过验证的实操步骤:
第一步:确认Hub所在机器的网络可达性
- 先找到Hub机器的局域网/公网IP(比如
192.168.1.100),同时确保该机器的4444端口没有被防火墙、安全组拦截 - 在Hub机器上执行
curl http://localhost:4444/wd/hub/status,能返回正常的JSON状态信息,说明Hub运行正常
第二步:在第二台机器启动Node容器
不需要复杂的网络配置,直接通过环境变量指定Hub地址即可,两种方式任选:
方式1:直接用Docker命令启动
docker run -d \ -e HUB_HOST=192.168.1.100 \ # 替换成你的Hub机器实际IP -e HUB_PORT=4444 \ selenium/node-chrome
方式2:用Docker Compose管理Node
创建一个单独的docker-compose.node.yml文件:
version: '3' services: chrome-node: image: selenium/node-chrome environment: - HUB_HOST=192.168.1.100 # 填写Hub机器IP - HUB_PORT=4444 restart: always
执行命令扩容该机器上的节点:
docker-compose -f docker-compose.node.yml up -d --scale chrome-node=3
第三步:验证连接状态
在Hub机器上访问http://localhost:4444/grid/console,就能看到第二台机器的Node已经成功注册到Hub中了
为什么之前的方案没生效?
- links:这是Docker Compose同一机器内的容器关联方式,跨机器完全不生效,因为它依赖本地Docker网络的域名解析
- 自定义networks:如果要跨机器用自定义网络,需要启用Docker Swarm的overlay网络,这会增加复杂度,对你的负载均衡需求来说没必要
- environment配置错误:你之前可能把
HUB_HOST设成了localhost或seleniumhub(本地服务名),这些在第二台机器上无法解析到Hub,必须用Hub机器的实际IP
如果遇到注册失败,先排查:
- 第二台机器能否ping通Hub的IP
- 第二台机器能否通过
telnet 192.168.1.100 4444连通端口 - 查看Node容器日志:
docker logs <容器ID>,定位连接超时或错误信息
内容的提问来源于stack exchange,提问作者Brian Mitchell
相关产品推荐
相关产品推荐

