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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:02