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

M1芯片Docker环境中Prisma无法连接PostgreSQL数据库问题求助

核心问题

核心问题分为两类:一是容器内访问数据库的地址配置错误,二是Postgres镜像未适配Apple Silicon架构导致的网络连通异常。Postgres日志中的relation "_prisma_migrations" does not exist属于首次迁移前的正常提示,不是故障原因,首次迁移成功后会自动创建该表,报错会消失。

解决方案

  • 修正容器内的数据库连接地址
    你当前的DATABASE_URL配置仅适用于宿主机器访问Postgres服务,当通过docker-compose run在next容器内执行Prisma命令时,next容器与Postgres容器同属Docker Compose默认网络,需要通过Postgres的服务名或容器名访问内部端口,而不是宿主的localhost:15432。
    修改.env文件中的DATABASE_URL为以下任意一种即可:
    # 用docker-compose中postgres的服务名访问
    DATABASE_URL="postgres://postgres:postgres@postgres:5432/postgres"
    # 或者用你定义的容器名访问
    DATABASE_URL="postgres://postgres:postgres@test-postgres:5432/postgres"
    

如果需要同时支持宿主本地开发和容器内运行,可以在docker-compose的next服务配置中添加environment字段,单独覆盖容器内的数据库连接地址。

  • 更换原生支持ARM架构的Postgres镜像
    Postgres 13的早期版本没有官方arm64构建,在M1芯片上通过QEMU转译运行时会随机出现网络连通异常,建议升级到原生支持Apple Silicon的版本:
    修改docker-compose.yml中Postgres的镜像配置:
    postgres:
        container_name: 'test-postgres'
        restart: unless-stopped
        image: 'postgres:15'
        ports:
          - '15432:5432'
        volumes:
          - 'pgdata:/var/lib/postgresql/data/'
        environment:
          POSTGRES_PASSWORD: postgres
    

更换镜像前注意备份pgdata卷中的数据,避免数据丢失。

  • 补充Prisma ARM架构二进制目标
    在schema.prisma的generator配置中添加arm64架构的二进制目标,适配Linux ARM容器环境:
    generator client {
      provider        = "prisma-client-js"
      binaryTargets   = ["native", "debian-openssl-1.1.x", "linux-arm64-openssl-1.1.x", "linux-musl"]
      previewFeatures = ["orderByRelation", "selectRelationCount"]
    }
    

修改后重新生成Prisma客户端:npx prisma generate。

  • 验证配置
    修改完成后重启所有容器:
    docker-compose down && docker-compose up -d
    再执行迁移命令验证:
docker-compose run --publish 5555:5555 next npx prisma migrate dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:33:04