Docker Compose部署NestJS+CockroachDB遇P1001连接错误求助
解决方案:Docker Compose部署时Prisma无法连接CockroachDB(P1001错误)
核心问题分析
你遇到的P1001错误,本质是Docker镜像构建阶段无法访问CockroachDB容器:Dockerfile中的npx prisma db push是在镜像构建时执行的,此时容器还未加入Docker Compose的服务网络,自然无法通过crdb主机名访问数据库服务。
具体修复方案
方案1:将Prisma数据库同步移到容器启动阶段(推荐)
把prisma db push从Dockerfile的构建步骤中移除,放到容器启动时执行,此时容器已加入Compose网络,可正常访问crdb服务。
- 修改Dockerfile,删除
RUN npx prisma db push这一行 - 在
docker-compose.yml的app服务中添加启动命令:
services: app: # 其他配置... command: sh -c "npx prisma db push && npm run start:prod"
方案2:构建阶段手动连接到Compose网络
如果必须在构建阶段执行数据库同步,需让构建过程接入CockroachDB所在的网络:
- 先单独启动CockroachDB服务:
docker-compose up -d crdb
- 查看Compose自动创建的网络名称(默认格式为
[项目名]_default):
docker network ls
- 构建app镜像时指定该网络:
docker-compose build --network [你的网络名称] app
方案3:确保CockroachDB监听所有地址
检查CockroachDB的启动命令,确保它监听0.0.0.0而非仅localhost,否则同一网络内的其他容器无法访问:
services: crdb: image: cockroachdb/cockroach:latest command: start-single-node --insecure --listen-addr=0.0.0.0 ports: - "26257:26257"
方案4:确认服务在同一自定义网络
如果使用了自定义网络,必须保证app和crdb服务都加入该网络:
networks: app-network: driver: bridge services: crdb: # 其他配置... networks: - app-network app: # 其他配置... networks: - app-network
内容的提问来源于stack exchange,提问作者sonytruelove
相关产品推荐
相关产品推荐

