Windows11执行npx prisma migrate dev遇P1001数据库连接错误求助
解决Windows 11下Docker PostgreSQL固定5432端口时Prisma P1001连接失败问题
问题现象
- 执行
npx prisma migrate dev时触发P1001错误:Error: P1001: Can't reach database server at
localhost:5432
Please make sure your database server is running atlocalhost:5432. - Docker容器正常运行,且能通过
localhost:8080正常访问Adminer - 将Docker端口映射改为自动分配宿主机端口(如
0.0.0.0:55156->5432/tcp),并修改数据库连接串端口为对应自动分配端口后,npx prisma migrate dev可正常执行
排查与解决方案
1. 检查本地5432端口占用情况
Windows系统中可能存在本地PostgreSQL服务或其他程序占用5432端口,导致Docker的端口映射无法生效,或Prisma误连接到本地服务:
- 打开命令提示符,执行:
netstat -ano | findstr :5432 - 若输出显示非Docker进程占用端口,打开任务管理器,找到对应PID的进程并结束,之后重启Docker容器
- 若为本地PostgreSQL服务占用,可停止该服务:
或修改本地PostgreSQL的端口,避免与Docker容器冲突net stop postgresql-x64-15 # 替换为你的PostgreSQL服务名称
2. 修改数据库连接串的主机地址
Windows Docker环境中,localhost有时无法正确映射到容器网络,可改用Docker提供的专用地址host.docker.internal:
修改.env文件中的DATABASE_URL:
DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PW}@host.docker.internal:5432/your_db_name?schema=public"
之后重新执行 npx prisma migrate dev
3. 重置Docker网络
Docker网络转发异常可能导致端口映射失效:
- 打开Docker Desktop,点击右上角设置图标(⚙️)
- 进入Resources -> Network
- 点击Reset network,等待重置完成后重启Docker和容器
4. 检查防火墙拦截
Windows Defender防火墙或第三方安全软件可能拦截5432端口通信:
- 打开Windows Defender防火墙,点击允许应用或功能通过Windows Defender防火墙
- 确保
Docker Desktop Backend和node.exe(Prisma运行时)被允许通过防火墙 - 可临时关闭防火墙测试,若连接恢复则需添加对应端口的允许规则
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

