Docker化NestJS+Prisma服务时Prisma无法连接Supabase数据库
NestJS+Prisma Docker化后无法连接Supabase数据库
我是Docker新手,跟着教程把NestJS+Prisma服务Docker化,镜像构建正常,但运行容器时Prisma连不上托管在Supabase的数据库。
问题细节
连接字符串配置(docker-compose.yaml片段)
environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@$db.ieikcwdztopjvzzgdppu.supabase.co:5432/${POSTGRES_DB}
错误信息
PrismaClientInitializationError: Authentication failed against database server at `db.ieikcwdztopjvzzgdppu.supabase.co`, the provided database credentials for `postgres` are not valid.
我试过不用环境变量,直接硬编码连接字符串,结果还是一样。完整的docker-compose.yaml配置如下:
services: api: build: dockerfile: Dockerfile context: . # Only will build development stage from our dockerfile target: development depends_on: - postgres env_file: - .env environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@$db.ieikcwdztopjvzzgdppu.supabase.co:5432/${POSTGRES_DB} postgres: image: postgres restart: always environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_HOST: ${POSTGRES_HOST} POSTGRES_PORT: ${POSTGRES_PORT} ports: - '5432:5432' volumes: - docker-nest-postgres:/var/lib/postgresql/data volumes: - .:/usr/src/app # Run a command against the development stage of the image command: npm run start:dev ports: - 3000:3000
解决步骤
- 删除本地Postgres服务:你要连接的是Supabase远程数据库,docker-compose里配置的本地Postgres容器完全多余,还会造成混淆,直接删掉整个
postgres服务块。 - 修正连接字符串语法:连接字符串里的
@$db多了个$符号,改成@db.ieikcwdztopjvzzgdppu.supabase.co。 - 检查Supabase权限:登录Supabase控制台,确认使用的数据库用户有远程连接权限,同时IP白名单要允许Docker容器的IP(测试阶段可以暂时设为
0.0.0.0/0)。 - 验证环境变量准确性:进入容器执行
echo $DATABASE_URL,查看输出的连接字符串和Supabase提供的是否完全一致,重点核对用户名、密码、数据库名。
修正后的docker-compose.yaml示例:
services: api: build: dockerfile: Dockerfile context: . target: development env_file: - .env environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db.ieikcwdztopjvzzgdppu.supabase.co:5432/${POSTGRES_DB} volumes: - .:/usr/src/app command: npm run start:dev ports: - 3000:3000
内容的提问来源于stack exchange,提问作者José Carlos
相关产品推荐
相关产品推荐

