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
相关产品推荐
相关产品推荐

