You need to enable JavaScript to run this app. AWS Linux下Docker Selenium Grid扩容Chrome节点报6900端口已分配错误
优惠活动
大模型
产品
解决方案
定价
更多

AWS Linux下Docker Selenium Grid扩容Chrome节点报6900端口已分配错误

问题根因
  • 报错的核心触发逻辑来自docker-compose.yml里的固定端口绑定规则。你为Chrome、Firefox、Opera三个节点服务配置了固定的主机端口映射,将容器内部VNC服务的5900端口,硬编码绑定到主机的6900、6901、6902三个固定端口上。
  • Docker Compose执行scale扩容时,会复用同一服务的所有配置项,不会自动为新生成的容器实例调整端口绑定规则。当你尝试将Chrome节点扩容到3个实例时,3个容器都会尝试抢占主机上已经被第一个Chrome实例占用的6900端口,最终触发端口已分配的报错。
  • 这类冲突和EC2实例环境、Docker服务运行状态无关,只要固定端口映射的配置存在,重启Docker、更换主机都无法解决扩容时的冲突问题。
可行扩容方案

方案1:移除节点VNC端口的主机映射(最适配无调试需求的场景)

  • 如果日常测试不需要从主机外部直连Selenium节点的VNC调试界面,直接删除三个节点服务下的ports配置块即可。
  • Selenium Grid的Hub与节点间通信走Docker内部网络的4442、4443端口,和VNC端口完全独立,删除VNC的主机映射不会影响Grid的正常调度。测试脚本只需要连接Hub暴露的4444端口,就能正常调用所有已注册的节点资源。
  • 修改完成后,重新启动服务再执行docker-compose scale chrome=3即可,不存在端口冲突后,扩容流程会直接顺利完成。

方案2:配置动态端口映射(保留VNC调试能力)

  • 如果需要保留节点的VNC调试能力,不需要给主机侧配置固定绑定端口,把节点的端口配置从"6900:5900"的固定映射格式,调整为仅声明容器暴露端口的格式:即"5900"。
  • 调整后,Docker Compose启动每个节点容器时,会自动从主机的可用端口池中分配一个空闲端口映射到容器的5900端口,不同节点的端口不会出现冲突。
  • 需要连接某个节点的VNC时,执行docker ps命令查看对应容器的实际端口映射信息即可,不需要提前规划固定端口。

方案3:弃用旧版scale命令,改用原生容器部署扩容

  • 你当前使用的Selenium 4.0.0-beta版本,对Docker Compose的scale命令兼容性有限。该版本的Hub原生支持服务发现,只要新增的节点配置了正确的Hub连接参数,就会自动完成注册,完全可以不依赖Compose的扩缩容逻辑。
  • 扩容时直接通过docker run命令启动额外的Chrome节点容器,不绑定固定的主机端口,就不会触发端口冲突问题。新启动的节点会自动注册到已运行的Hub实例上,直接可以被测试脚本调度。
关键注意点
  • 多实例部署的服务,绝对不能配置固定的主机端口映射,这是Docker Compose编排的通用规范。
  • 仅需要为Selenium Hub配置固定端口映射即可,测试脚本依赖Hub的固定地址发起连接,不需要对Hub做扩容操作。
  • 你之前尝试的重启Docker服务、更换Linux实例的排查方向,完全没有触达问题的核心,自然无法解决端口冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 16:06:00