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

WSL2环境下Docker Compose中Python与Selenium无法通信求助

WSL2环境下Docker Compose的Python-Selenium连接问题排查

问题背景

搭建了一套用于Python-Selenium测试的Docker Compose环境,在Linux服务器上运行正常,但在WSL2环境中运行时,Python容器无法连接到Selenium容器。

现有配置

Docker Compose配置

version: "3.9"
services:
  selenium:
    image: "selenium/standalone-firefox:4.5.2-20221021"
    ports:
      - "4444:4444"
      - "7900:7900"
    shm_size: '2gb'
    container_name: selenium


  python:
    build: "python"
    container_name: python_tests
    depends_on:
      - "selenium"

Python的Dockerfile

FROM python:3.10
COPY selenium_tests.py ./
COPY requirements.txt ./
ENV NO_PROXY = selenium:4444
RUN ["python3.10", "-m", "pip",  "install", "-r", "requirements.txt"]
CMD ["python3.10", "selenium_tests.py"]

Python测试代码片段

print("sleeping so selenium wakes")
sleep(10)
driver = webdriver.Remote(command_executor='http://selenium:4444/wd/hub', options=webdriver.FirefoxOptions())

排查关键点

1. 修复NO_PROXY环境变量语法错误

Dockerfile中ENV NO_PROXY = selenium:4444的写法存在问题,等号前后的空格会导致变量值包含无效空格,正确写法应为:

ENV NO_PROXY=selenium:4444

错误的变量值会导致代理规则失效,可能让请求被错误转发。

2. 替换sleep为容器健康检查

depends_on仅能保证Selenium容器启动,但不代表Selenium服务已就绪。用健康检查替代硬编码的sleep更可靠:
修改Docker Compose配置:

services:
  selenium:
    # 原有配置...
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4444/wd/hub/status"]
      interval: 5s
      timeout: 10s
      retries: 5
  python:
    # 原有配置...
    depends_on:
      selenium:
        condition: service_healthy

这样Python容器会等待Selenium服务真正就绪后再启动测试。

3. 验证容器间网络连通性

进入Python容器,执行以下命令排查网络问题:

# 进入容器
docker exec -it python_tests bash

# 检查是否能解析selenium服务
ping selenium

# 检查Selenium服务状态
curl http://selenium:4444/wd/hub/status

如果ping不通,说明WSL2的Docker内部DNS解析存在问题;如果curl返回错误,说明Selenium服务未正常启动。

4. 检查Selenium端点路径

Selenium 4部分版本可能调整了端点路径,可尝试将命令执行器地址改为http://selenium:4444:

driver = webdriver.Remote(command_executor='http://selenium:4444', options=webdriver.FirefoxOptions())

5. WSL2特定网络检查

  • 确认WSL2版本为最新,执行wsl --update进行更新。
  • 检查Windows防火墙是否允许Docker相关网络请求,可临时关闭防火墙测试。
  • 验证WSL2的网络模式,Docker在WSL2中默认使用WSL网络栈,若有自定义网络配置,需确保内部容器网络未被阻断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:15:48