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

Docker部署PostgreSQL连接异常求助:服务器意外终止

问题分析与解决步骤

1. 立即修正:密码不匹配

你的docker-compose.yml中PostgreSQL的密码是postgres,但连接字符串里写的是postgres123,这是直接导致认证失败的潜在问题,先把连接字符串改成:

engine = create_tables_for_voting.create_tables("postgresql+psycopg2://postgres:postgres@db:5432/voting")

2. 服务名db无法解析的原因

只有当你的应用和PostgreSQL容器在同一个Docker网络(即app网络)中时,才能用服务名db访问。如果你的应用是在宿主机本地运行的,DNS根本找不到db这个主机,这时候必须用localhost连接。

3. localhost:5433连接失败的原因

PostgreSQL默认只监听容器内的5432端口,你在docker-compose.yml里映射的5433:5433完全无效——因为容器内没有服务在5433端口监听。

解决端口问题的两种方案:

方案A:直接用默认端口映射(宿主机5432→容器5432)

  • 先检查宿主机5432端口是否被占用:
    netstat -ano | findstr :5432  # Windows
    lsof -i :5432  # Linux/macOS
    
  • 如果端口未被占用,直接用localhost:5432连接:
    engine = create_tables_for_voting.create_tables("postgresql+psycopg2://postgres:postgres@localhost:5432/voting")
    
  • 如果端口被占用,修改端口映射为宿主机5433→容器5432:
    在docker-compose.yml的ports字段改成:
    ports:
      - "5433:5432"
    
    然后重新启动容器,用localhost:5433连接。

方案B:修改PostgreSQL配置监听5433端口(不推荐,没必要)

如果一定要让容器内PostgreSQL监听5433,需要挂载自定义的postgresql.conf配置文件,修改port = 5433,这属于多余操作,优先用方案A。

4. 验证容器状态

先确保PostgreSQL容器正常运行且健康:

  • 查看容器状态:
    docker-compose ps
    
    确认db服务的状态是Up (healthy)。
  • 查看容器启动日志,排查是否有初始化错误:
    docker-compose logs db
    
    如果日志里有类似database system is ready to accept connections的信息,说明容器正常启动。

5. 应用在Docker容器中的额外配置

如果你的应用也是用Docker Compose部署的容器,需要给应用服务添加相同的网络配置:

your-app-service:
  # 其他配置...
  networks:
    - app

这样应用容器就能通过服务名db:5432访问PostgreSQL了。


内容的提问来源于stack exchange,提问作者The one who doesn't know 1012

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:50:07