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

Docker-Compose部署Golang应用遇Nginx 502连接拒绝问题求助

问题分析与解决方案

从Nginx错误日志connect() failed (111: Connection refused)可以明确:Nginx能解析到credit_server的容器IP(172.20.0.5),但无法连接到目标端口8080,核心原因是Golang应用在容器内未正确监听可外部访问的地址,或端口配置不匹配。

1. 检查Golang应用的监听地址

本地运行正常但容器内无法访问,大概率是应用代码中监听了127.0.0.1:8080,而非0.0.0.0:8080。127.0.0.1仅允许容器内部localhost访问,Docker网络中的其他服务(如Nginx)无法连接。

修改代码中的监听逻辑:

// 错误写法:仅本地可访问
http.ListenAndServe("127.0.0.1:8080", router)

// 正确写法:允许所有网络接口访问
http.ListenAndServe("0.0.0.0:8080", router)

2. 验证容器内应用的端口监听状态

进入credit_server容器,检查应用是否真的在8080端口监听:

# 进入容器
docker-compose exec credit_server sh

# 安装netstat(若容器内无此命令)
apk add net-tools

# 查看端口监听情况
netstat -tulpn | grep 8080

如果没有输出,说明应用未启动成功或未监听8080端口,需检查:

  • 启动命令是否正确(Dockerfile中的CMD参数是否匹配应用要求)
  • 配置文件config.yml中的端口是否设置为8080
  • 容器内应用日志:执行docker-compose logs credit_server查看启动日志,排查是否有启动失败或端口配置错误

3. 确认Docker网络连通性

在Nginx容器内测试与credit_server的8080端口连通性:

docker-compose exec nginx sh

# 测试TCP连接
nc -zv credit_server 8080

若连接失败,回到前两步排查应用监听问题;若连接成功,检查Nginx配置是否存在其他问题(如路径匹配错误)。

4. 补充Docker-Compose配置(可选)

虽然同一Docker网络内服务无需暴露端口,但为了便于本地调试,可在credit_server服务中添加端口映射:

credit_server:
  build:
    context: ..
    dockerfile: ${PROJECT_DIR}/deployments/Dockerfile
    args:
      BUILD_APP_NAME: credit-server
  depends_on:
    credit_service_db:
      condition: service_healthy
  ports:
    - "8080:8080" # 本地可直接访问容器内8080端口,便于调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:15:43