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

Docker Compose部署Golang后端、PostgreSQL及Redis服务时,后端连接PostgreSQL失败的问题求助

Docker Compose部署Golang后端、PostgreSQL及Redis服务时,后端连接PostgreSQL失败的问题求助

嗨,我来帮你排查这个连接失败的问题~你遇到的connection refused错误主要有两个关键原因,咱们一步步解决:

1. 数据库连接地址配置错误

在Docker Compose的bridge网络中,每个容器都是独立的网络个体,你后端代码里用的127.0.0.1:5433指向的是后端容器自己,而不是PostgreSQL容器。正确的做法是:

  • 把连接地址的host改成db(也就是你docker-compose.yml里PostgreSQL服务的名称,Docker会自动解析这个服务名到对应的容器IP)
  • 端口用容器内部的5432,而不是映射到宿主机的5433(宿主机端口是给外部访问用的,容器之间通信直接用容器内部端口)

举个例子,你的Golang数据库DSN应该改成类似这样:

dsn := "postgres://postgres:123@db:5432/postgres?sslmode=disable"

2. 数据库未完全就绪就发起连接

虽然你在后端服务里加了depends_on: - db,但这个配置只是保证db容器先启动,不代表PostgreSQL服务已经完成初始化、可以接受连接了。当后端启动时,数据库可能还在加载初始化脚本,这时候就会出现连接拒绝。

你可以给PostgreSQL服务加上健康检查,让Docker确认数据库就绪后再启动后端。修改后的docker-compose.yml片段如下:

services:
   db:
    image: postgres:15.7
    restart: always
    network_mode: bridge
    volumes:
    - ./db/table.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
    - '5433:5432'
    environment:
        POSTGRES_DB: postgres
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: 123
    # 添加健康检查,确认数据库就绪
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
   
   redis:
    image: redis:7.0.12
    network_mode: bridge
    ports:
      - '6380:6379'
   
   backend:
    build: ./backend
    network_mode: bridge
    ports:
       - '8000:8089'  
    depends_on:
      db:
        # 依赖db的健康检查状态,确保数据库就绪后再启动
        condition: service_healthy

额外检查点

  • 确认你的./db/table.sql初始化脚本没有语法错误,避免数据库初始化失败
  • 可以手动进入PostgreSQL容器,用psql命令测试是否能正常连接,验证数据库本身没问题:
docker exec -it <你的db容器ID> psql -U postgres -d postgres

按照上面的步骤修改后,应该就能解决连接拒绝的问题啦~

备注:内容来源于stack exchange,提问作者Vali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:34:30