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

Docker环境下WebDriver.Remote无法连接Selenium Grid求助

解决Docker容器中webdriver.Remote连接Selenium Grid失败的问题

排查与修复步骤

1. 修正docker-compose.yaml语法与依赖逻辑

你的flask-web服务配置存在语法错误,且依赖判断仅基于容器启动而非服务就绪,这是连接失败的核心原因之一:

  • 移除服务名后不符合YAML规范的注释,改用#标注
  • 增加健康检查,确保flask容器在Selenium Hub和Node完全就绪后再启动
    修正后的配置示例:
version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.14.0
    container_name: selenium-hub
    ports:
      - "9090:4444"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4444/wd/hub/status"]
      interval: 5s
      timeout: 10s
      retries: 5
  chromenode:
    image: selenium/node-chrome:3.14.0
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5555/wd/hub/status"]
      interval: 5s
      timeout: 10s
      retries: 5
  flask-web:
    image: main
    container_name: template_flask
    depends_on:
      selenium-hub:
        condition: service_healthy
      chromenode:
        condition: service_healthy
  • 无需手动配置links,Docker Compose默认会为所有服务创建统一网络,直接通过服务名即可访问

2. 优化Python连接代码

替换已弃用的API,增加可靠的重试逻辑,同时解决容器内Chrome运行的内存限制问题:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from requests.exceptions import ConnectionError

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')  # 解决容器内共享内存不足问题

driver = None
max_retries = 10
retry_interval = 2

for attempt in range(max_retries):
    try:
        driver = webdriver.Remote(
            command_executor='http://selenium-hub:4444/wd/hub',
            options=options
        )
        break
    except ConnectionError:
        print(f"连接Selenium Hub失败,重试中({attempt+1}/{max_retries})")
        time.sleep(retry_interval)

if not driver:
    raise Exception("多次重试后仍无法连接Selenium Hub")

3. 验证网络连通性

进入flask容器内部,执行命令测试与Selenium Hub的连通性:

docker exec -it template_flask curl http://selenium-hub:4444/wd/hub/status
  • 返回包含"ready": true的JSON则说明网络正常;若无法连接,检查容器是否归属同一网络(通过docker inspect template_flask查看网络配置)

4. 检查Selenium Hub启动状态

查看Selenium Hub日志,确认服务正常启动:

docker logs selenium-hub
  • 日志出现Selenium Grid hub is up and running说明服务就绪;若有错误,根据日志提示修复(如端口占用、资源不足等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18