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

Docker Compose部署Flask与PostgreSQL容器后浏览器无法访问Flask应用

遗漏的常见配置排查
  • 数据库连接地址配置错误:必须使用docker-compose中定义的PostgreSQL服务名作为数据库主机地址,不能写127.0.0.1或localhost,容器内部的localhost指向容器自身,无法连通其他容器。例如你的PostgreSQL服务命名为db,则配置中的DB_HOST参数填db,端口填容器内部的5432,而非宿主机映射的端口。
  • 服务启动时序问题:depends_on仅保证PostgreSQL容器先启动,不会等待数据库进程完全初始化就绪,Flask启动时如果DB还未完成启动就会连接失败,导致服务直接崩溃,可在Flask代码中增加数据库连接重试逻辑,或使用wait-for-it类工具控制启动时机。
  • 端口占用问题:先执行lsof -i:5000或netstat -tulpn | grep 5000检查宿主机5000端口是否被其他服务占用,若被占用可修改docker-compose的端口映射规则,例如改为5001:5000,访问时使用5001端口即可。
  • 网络配置冲突:如果手动指定了network_mode: host会覆盖端口映射配置,非特殊需求不要添加该参数;docker-compose默认会为项目创建统一的内部网络,无需额外配置就能实现服务间连通,若手动指定了不同网络要确保两个服务在同一个网络下。
  • 容器运行状态异常:先执行docker ps -a查看两个容器是否正常运行,若Flask容器已退出,执行docker logs <Flask容器名>查看具体报错信息定位问题。
可用配置示例

app.py核心配置

from flask import Flask
import psycopg2 # 若使用SQLAlchemy等ORM同理修改连接地址即可

app = Flask(__name__)

# 数据库配置 重点是host为postgres的服务名
DB_CONFIG = {
    "host": "db",
    "port": 5432,
    "user": "postgres",
    "password": "自定义密码",
    "database": "自定义库名"
}

@app.route('/')
def hello():
    try:
        conn = psycopg2.connect(**DB_CONFIG)
        conn.close()
        return "Flask服务正常,数据库连接成功"
    except Exception as e:
        return f"Flask服务正常,数据库连接失败: {str(e)}"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True) # 生产环境关闭debug参数

Flask应用Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]

docker-compose.yml配置

version: '3.8'

services:
  web:
    build: .
    ports:
      - "127.0.0.1:5000:5000" # 如需公网访问可去掉127.0.0.1
    depends_on:
      - db
    environment:
      - DB_HOST=db
      - DB_PORT=5432
      - DB_USER=postgres
      - DB_PASSWORD=自定义密码
      - DB_NAME=自定义库名

  db:
    image: postgres:14-alpine
    ports:
      - "5432:5432" # 不需要本地工具连数据库可删除该行
    environment:
      - POSTGRES_PASSWORD=自定义密码
      - POSTGRES_DB=自定义库名
    volumes:
      - postgres_data:/var/lib/postgresql/data # 数据持久化,重启容器不丢失数据

volumes:
  postgres_data:
验证步骤
  • 执行docker-compose down -v清理之前的残留容器和匿名卷
  • 执行docker-compose up --build重新构建启动服务
  • 浏览器访问http://127.0.0.1:5000即可正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:33:02