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

Docker Compose中Flask应用调用Selenium Remote WebDriver连接被拒问题

排查Docker Compose环境下Flask API无法连接Selenium Grid的ConnectionRefusedError

1. 修正API里的Selenium连接地址

本地能通过localhost:4444访问Selenium Grid是因为端口映射到了宿主机,但Docker容器之间通信得用服务名,不能用localhost。比如你的docker-compose.yml里Selenium服务叫selenium-hub,那API代码里的连接地址得改成http://selenium-hub:4444/wd/hub,而不是http://localhost:4444/wd/hub。
验证方法:进入API容器内部,跑curl http://selenium-hub:4444,看能不能拿到Selenium Grid的响应。

2. 确认服务在同一Docker网络

默认docker-compose会给所有服务创建一个共享网络,但如果手动给服务指定了不同的networks配置,就得确保API和Selenium用的是同一个网络。检查你的docker-compose.yml,两个服务的网络配置要一致。

3. 调整服务启动顺序

Selenium Grid启动需要点时间,API容器可能在Selenium完全就绪前就启动并发起连接,直接导致连接拒绝。解决办法是给API加启动依赖和健康检查,等Selenium就绪再启动API:

services:
  api:
    build: ./api
    depends_on:
      selenium-hub:
        condition: service_healthy
  selenium-hub:
    image: selenium/hub:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4444/wd/hub/status"]
      interval: 10s
      timeout: 5s
      retries: 5

4. 检查Selenium的端口监听状态

确保Selenium容器的4444端口是监听在0.0.0.0,而不是127.0.0.1——如果只监听本地回环地址,同一网络的其他容器根本连不上。
进入Selenium容器,执行netstat -tulpn | grep 4444,看监听地址是不是0.0.0.0:4444。

5. 排查API容器的网络权限

别给API容器配置错误的网络模式,比如乱设network_mode: host,或者把它放进了internal: true的隔离网络里。另外如果API容器里有防火墙,得确认它允许访问4444端口。

6. 看日志找具体问题

  • 查API容器日志:docker-compose logs api,看错误信息里是DNS解析失败,还是端口不通。
  • 查Selenium容器日志:docker-compose logs selenium-hub,确认Selenium Grid是不是正常启动并在监听端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:11:13