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

Docker中运行Playwright无头E2E测试时Chromium/Firefox报连接拒绝错误

问题排查与解决步骤

1. 修复服务启动依赖时序问题

当前e2e-tests仅等待app容器启动,未等待nginx配置加载完成、端口就绪,需先给app服务增加健康检查:

# docker-compose.yml 中app服务新增配置
healthcheck:
  test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"]
  interval: 2s
  timeout: 3s
  retries: 10

修改e2e-tests的依赖规则:

depends_on:
  app:
    condition: service_healthy

2. 修复Chromium、Firefox连接拒绝问题

该问题是浏览器默认策略导致:优先走IPv6解析、私有域名安全限制、新无头模式兼容性问题,可在playwright初始化浏览器时添加对应配置:

# Chromium启动配置
browser = playwright.chromium.launch(
    headless="old", # 兼容旧版无头模式
    args=[
        "--no-sandbox",
        "--disable-dev-shm-usage",
        "--disable-web-security",
        "--allow-insecure-localhost",
        "--disable-ipv6", # 禁用IPv6解析,避免Docker未开IPv6时解析失败
    ]
)

# Firefox启动配置
browser = playwright.firefox.launch(
    headless="old",
    firefox_user_prefs={
        "network.dns.disableIPv6": True,
        "network.http.allow_insecure_localhost": True
    }
)

3. 修复WebKit选择器找不到问题

该问题是前端跳转异常导致:你配置的KEYCLOAK_URL=http://keycloak:8080仅容器内部可解析,浏览器前端跳转时无法识别keycloak域名,会出现跳转失败、页面加载异常。
两种解决方案二选一:

  • 给所有浏览器的启动配置添加hosts映射,将keycloak映射到对应容器IP
  • 将KEYCLOAK_URL修改为e2e-tests容器和浏览器都能解析的地址,比如用宿主机器的IP+暴露的Keycloak端口

排查阶段可在点击选择器前打印页面内容、截图确认实际加载的页面:

page.wait_for_load_state("networkidle")
print(page.content())
page.screenshot(path="webkit_debug.png", full_page=True)
page.click("#username")

快速验证方案

若上述步骤未定位问题,可直接将SERVICE_HOST改为app服务的容器IP,跳过域名解析验证:
在e2e-tests容器内执行ping -c1 app拿到app的容器IP,替换SERVICE_HOST为http://[容器IP]:80后重新运行测试,若正常则确认是DNS解析问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:48:01