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

GitLab CI中Docker自定义网络下Cypress容器无法访问前端服务

解决GitLab CI中Cypress无法访问前端容器的问题

以下是针对你遇到的Cypress无法访问http://frontend-service:4200的排查和解决步骤:

  • 确认Cypress容器已加入自定义网络
    启动Cypress容器时必须显式指定--network custom_network参数,否则它会默认使用Docker的bridge网络,无法访问自定义网络内的容器。例如启动命令应类似:

    docker run --network custom_network -e CYPRESS_BASE_URL=http://frontend-service:4200 cypress/included:latest
    
  • 检查前端服务的监听地址
    确保http-server启动时绑定了所有网卡(而非仅localhost),否则同一网络内的其他容器无法访问。修改前端容器的启动命令,添加-a 0.0.0.0参数:

    http-server dist -p 4200 -a 0.0.0.0
    

    如果服务仅监听127.0.0.1,即使容器内部能curl访问,外部容器(包括Cypress)的请求会被拒绝。

  • 添加服务就绪等待逻辑
    前端服务日志显示“运行正常”不代表页面已完全加载完成,Cypress可能在服务就绪前发起了请求。在启动Cypress前加入健康检查脚本,确保前端服务可正常响应:

    # 等待前端服务返回200状态码
    until curl -s -o /dev/null -w "%{http_code}" http://frontend-service:4200 | grep -q "200"; do
      echo "等待前端服务就绪..."
      sleep 2
    done
    
  • 验证Cypress的baseUrl配置
    确认CYPRESS_BASE_URL环境变量正确传递到Cypress容器,且未被配置文件覆盖。检查cypress.config.js中的baseUrl设置:

    module.exports = defineConfig({
      e2e: {
        baseUrl: process.env.CYPRESS_BASE_URL || 'http://localhost:4200',
        // 其他配置
      }
    })
    

    避免硬编码的localhost覆盖环境变量中的容器地址。

  • 测试自定义网络的DNS解析
    在CI阶段临时启动一个alpine容器,加入custom_network测试DNS解析是否正常:

    docker run --network custom_network alpine nslookup frontend-service
    

    如果解析失败,检查容器名拼写是否正确(Docker容器名大小写不敏感,但需完全匹配),或自定义网络是否正常创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:29:53