GitHub Action中访问Docker容器连接被拒问题求助
问题排查与解决
核心可能原因及修复方案
1. Express服务仅绑定本地回环地址
Express默认调用app.listen(8080)时,会绑定到127.0.0.1,这会导致服务只能在容器内部访问,宿主机(GitHub Action Runner)无法通过端口映射连接。
修复代码:
修改Express启动逻辑,强制绑定到0.0.0.0,允许外部访问:
app.listen(8080, '0.0.0.0', () => { console.log('Server listening on port 8080'); });
2. 服务未完全启动就执行curl
容器启动后,Express可能需要几秒初始化,直接执行curl会因服务未就绪导致连接拒绝。
修复步骤:
在测试步骤中添加循环重试逻辑,等待服务启动:
- name: Test App in Container id: test run: | # 最多等待30秒,每秒重试一次 for attempt in {1..30}; do if curl -v http://localhost:8080/data; then exit 0 fi sleep 1 done echo "Service failed to start within 30 seconds" exit 1
辅助排查手段
如果上述方案无效,可通过以下步骤定位问题:
检查容器内服务状态:进入容器内部测试服务是否正常运行
docker exec <容器ID/名称> curl http://localhost:8080/data若此命令成功,说明是端口映射/监听地址问题;若失败,说明应用启动异常。
查看容器日志:获取应用启动日志排查错误
docker logs <容器ID/名称>
内容的提问来源于stack exchange,提问作者Sebastian Dine
相关产品推荐
相关产品推荐

