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

