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

Go JSON-RPC服务器Docker-Compose运行报错curl(52)空回复求助

JSON-RPC容器化后无响应问题解决

核心问题

你的配置存在端口不匹配和本地代码卷挂载覆盖程序两个关键问题,导致容器内服务无法被外部正常访问。

具体修复步骤

1. 统一端口配置

docker-compose中设置的RPC_ADDR=:9001,意味着程序在容器内监听9001端口,但端口映射却是9001:9000(宿主机9001映射到容器9000),两边端口完全不匹配,自然拿不到响应。

修改docker-compose里的环境变量,让程序监听容器内的9000端口,和Dockerfile的EXPOSE、端口映射保持一致:

environment:
  - RPC_ADDR=:9000  # 改成与容器侧映射端口一致
  - HTTP_ADDR=:8001
  - PG_PORT=5432
  - PG_HOST=postgres-db

如果需要访问HTTP服务,记得在ports里补充对应映射:

ports:
  - "9001:9000"
  - "8001:8001"  # 新增HTTP端口映射(按需添加)

2. 移除本地代码卷挂载

你配置了volumes: - .:/app,会把本地项目目录直接覆盖到容器的/app目录,导致容器运行的是本地未编译的代码,而非Dockerfile中编译好的/app可执行文件,极易出现依赖缺失或运行异常。如果不需要热重载代码,直接删除这个volumes配置。

3. 确认程序监听地址

确保Go代码里没有硬绑定127.0.0.1,必须监听0.0.0.0:端口或者简写为:端口(后者等价于监听所有网卡)。如果绑定了localhost,容器内的服务仅能自身访问,外部(包括宿主机)根本无法连接。

4. 验证服务状态

  • 查看容器日志确认服务是否正常启动:docker logs rpc-app_v1.0
  • 若distroless镜像支持,进入容器检查监听端口:docker exec -it rpc-app_v1.0 ss -tulpn

修改后的完整docker-compose示例

version: "3"

services:
  app:
    build: .
    container_name: "rpc-app_v1.0"
    ports:
      - "9001:9000"
      - "8001:8001"
    restart: on-failure
    environment:
      - RPC_ADDR=:9000
      - HTTP_ADDR=:8001
      - PG_PORT=5432
      - PG_HOST=postgres-db
    depends_on:
      - postgres-db
    networks:
      - back

  postgres-db:
    image: postgres:latest
    container_name: "rpc-app-db_v1.0"
    ports:
      - "5435:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=qwerty
      - POSTGRES_DB=postgres
      - POSTGRES_HOST=postgres-db
    networks:
      - back

networks:
  back:
    driver: bridge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:19