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

Docker化Flask应用中SQLAlchemy连接PostgreSQL失败求助

Flask容器化后无法连接PostgreSQL数据库的解决方案

问题背景

本地运行正常的Flask应用,容器化部署后出现PostgreSQL连接拒绝错误。

本地数据库配置(config.py)

SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:root@localhost:5432/dataset_creator'

Docker Compose配置

version: '3.7'

services:
  db:
    container_name: postgresql
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: root

  adminer:
    container_name: adminer
    image: adminer
    restart: always
    ports:
      - 8080:8080

  datasetcreator:
    container_name: orion-flask-app
    build:
      context: ./
    ports:
      - "5000:5000"

错误日志

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?

解决步骤

1. 修正数据库连接地址

容器内的localhost指向容器自身,而非数据库容器。Docker Compose默认创建的专属网络中,服务名可直接作为域名解析到对应容器,因此需将连接地址中的localhost替换为数据库服务名db:

SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:root@db:5432/dataset_creator'

2. 保证服务启动顺序

PostgreSQL容器启动需要时间完成初始化,可在docker-compose.yml中为Flask服务添加depends_on配置,确保数据库服务先启动:

datasetcreator:
    container_name: orion-flask-app
    build:
      context: ./
    ports:
      - "5000:5000"
    depends_on:
      - db

注:depends_on仅保证启动顺序,不确保数据库服务完全就绪,生产环境需配合健康检查脚本使用。

3. 预创建目标数据库

当前配置未指定初始化数据库,需为db服务添加POSTGRES_DB环境变量,让PostgreSQL容器启动时自动创建dataset_creator数据库:

db:
    container_name: postgresql
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: root
      POSTGRES_DB: dataset_creator

内容的提问来源于stack exchange,提问作者Berkay Çavuşoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:41:31