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

Docker镜像无法通过Prisma访问Docker Compose部署的PostgreSQL

解决Docker Compose部署PostgreSQL时Prisma无法连接的问题

以下是针对P1001连接错误的排查和修复步骤:

1. 修正DATABASE_URL配置

容器内的应用无法通过localhost访问同一Docker Compose网络中的PostgreSQL服务,必须使用服务名作为主机地址:

  • 正确格式:postgresql://<用户名>:<密码>@<服务名>:5432/<数据库名>?schema=public
  • 示例(假设PostgreSQL服务名为db):postgresql://postgres:postgres@db:5432/mydb?schema=public
  • 确保.env文件中的DATABASE_URL完全符合该格式,不要混用localhost和服务名。

2. 确保服务在同一网络

Docker Compose默认会创建一个共享网络,但若手动指定了网络配置,需确认应用服务和PostgreSQL服务在同一网络内:

# docker-compose.yml示例,确保网络一致
services:
  app:
    build: .
    networks:
      - app-network
  db:
    image: postgres:latest
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

3. 控制服务启动顺序

Prisma启动时若PostgreSQL未完全就绪,会触发连接失败。添加健康检查确保数据库就绪后再启动应用:

services:
  app:
    build: .
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:latest
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U <用户名> -d <数据库名>"]
      interval: 5s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: mydb

4. 验证Prisma数据源配置

确保prisma.schema中的datasource块正确引用环境变量:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

禁止在schema文件中硬写localhost或固定地址。

5. 确认环境变量正确加载

进入应用容器,执行echo $DATABASE_URL检查变量是否正确传入。若未加载,在docker-compose.yml中添加env_file配置:

app:
  build: .
  env_file:
    - .env

6. 检查PostgreSQL连接权限

确保PostgreSQL允许Docker网络内的连接:

  • 默认postgres镜像的pg_hba.conf允许所有IP连接,若自定义了配置,需添加规则:host all all 0.0.0.0/0 md5
  • 无需映射5432端口到宿主机(除非需要外部工具访问),内部服务间连接直接用容器端口即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:09