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

Python与PostgreSQL Docker容器连接失败问题求助

Docker Compose下Python容器无法连接PostgreSQL的解决方案

核心问题分析

  1. 容器内localhost的误解:Python容器中的localhost指向容器自身,而非宿主机或数据库容器,因此无法通过localhost访问PostgreSQL服务。
  2. 端口映射配置错误:PostgreSQL默认监听容器内的5432端口,但docker-compose.yml中错误地将宿主机5430端口映射到容器的5430端口,导致端口不匹配。
  3. 数据库服务地址配置错误:.env中POSTGRES_SERVER设置为localhost,未使用Docker Compose网络中数据库服务的名称。

具体修复步骤

1. 修正环境变量配置(.env)

将POSTGRES_SERVER的值改为Docker Compose中数据库服务的名称database,这样Python容器可通过服务名直接访问数据库容器:

POSTGRES_USER = "howdyadmin"
POSTGRES_PASSWORD = "howdy"
POSTGRES_SERVER = "database"  # 替换原localhost
POSTGRES_DB = "howdydb"
POSTGRES_PORT = 5432  # 容器内部PostgreSQL默认端口

2. 修正Docker Compose端口映射(docker-compose.yml)

调整数据库服务的端口映射,将宿主机端口映射到容器内正确的5432端口(此映射仅用于宿主机连接数据库,Python容器无需依赖此映射):

version: '3.8'

services:
  server:
    container_name: howdyserver
    restart: always
    build: 
      context: ./server
      dockerfile: backend.Dockerfile
    volumes:
      - ./server/app/:/app/
    env_file:
      - ./server/.env
    ports:
      - 8000:8000
    depends_on:
      - database
  
  database:
    container_name: howdydb
    image: postgres:15-alpine
    restart: always
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./server/.env
    ports:
      - 5430:5432  # 修正为宿主机5430映射到容器5432

volumes:
  postgres_data:

3. 验证Python代码中的连接字符串

确保代码中使用环境变量构建正确的数据库连接URL,例如:

import os
from sqlalchemy import create_engine

POSTGRES_USER = os.getenv("POSTGRES_USER")
POSTGRES_PASSWORD = os.getenv("POSTGRES_PASSWORD")
POSTGRES_SERVER = os.getenv("POSTGRES_SERVER")
POSTGRES_PORT = os.getenv("POSTGRES_PORT")
POSTGRES_DB = os.getenv("POSTGRES_DB")

SQLALCHEMY_DATABASE_URL = f"postgresql://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_SERVER}:{POSTGRES_PORT}/{POSTGRES_DB}"
engine = create_engine(SQLALCHEMY_DATABASE_URL)

验证修复

重新构建并启动容器:

docker-compose down
docker-compose up -d --build

查看Python容器日志,确认数据库连接成功。

内容的提问来源于stack exchange,提问作者Petr Holoubek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:54:53