从selenium/node-chrome-debug容器调用本地API报连接被拒如何解决
问题根因
Docker容器默认使用独立的网络命名空间,你在Selenium Chrome节点容器内访问的localhost指向的是容器自身的环回地址,和宿主机、其他容器的网络隔离,和Selenium Grid Hub无关,所以会出现连接拒绝报错。
解决方案
分两种场景对应处理:
场景1:REST API部署在宿主机的5000端口
可任选以下一种方案:
- 方案1:使用宿主机映射域名访问
在你的docker-compose.yml的chrome服务配置中新增extra_hosts字段,配置如下:
修改配置后重启容器,将RestSharp的请求地址改为version: "3" services: selenium-hub: image: selenium/hub ports: - "4444:4444" environment: GRID_MAX_SESSION: 2 GRID_BROWSER_TIMEOUT: 300 GRID_TIMEOUT: 300 # 注意原配置这里有笔误,括号要改成下划线 chrome: image: selenium/node-chrome-debug extra_hosts: - "host.docker.internal:host-gateway" depends_on: - selenium-hub environment: HUB_PORT_4444_TCP_ADDR: selenium-hub HUB_PORT_4444_TCP_PORT: 4444 NODE_MAX_SESSION: 2 NODE_MAX_INSTANCES: 2http://host.docker.internal:5000即可访问宿主机的REST API。 - 方案2:使用host网络模式(仅支持Linux宿主机)
在chrome服务配置中新增network_mode: "host",容器会和宿主机共享网络栈,直接访问http://localhost:5000即可,注意该模式下Selenium Hub的访问地址需要改为localhost:4444,不能再使用服务名selenium-hub解析。
场景2:REST API直接部署在selenium/node-chrome-debug容器内部
- 首先修改REST API的启动配置,将监听地址从
127.0.0.1:5000改为0.0.0.0:5000,避免只绑定环回地址导致容器内部也无法访问。 - 如果需要从宿主机或其他容器访问该API,可在
chrome服务下新增端口映射:ports: - "5000:5000"
额外提醒
你原有的docker-compose配置中存在笔误:GRID)TIMEOUT的右括号需要改为下划线,即GRID_TIMEOUT,否则Selenium Hub启动会出现配置加载错误。
内容的提问来源于stack exchange,提问作者JMFS
相关产品推荐
相关产品推荐

