M1相关!- Prisma:无法在`database`:`5432`上连接到数据库服务器

27

自从我转移到新的Apple Silicon架构后,我的带有nextjs和postgres的docker设置不再工作。Docker中的数据库无法被nextjs服务器找到,我正在使用prisma。

Prisma客户端无法访问5432端口上的Postgres数据库。

不能在test-postgres5432处连接到数据库服务器

迁移也不起作用,返回与上述相同的错误。

docker-compose run --publish 5555:5555 next npx prisma migrate dev

docker-compose.yml

:Docker Compose 配置文件。

postgres:
    container_name: 'test-postgres'
    restart: unless-stopped
    image: 'postgres:13'
    ports:
      - '15432:5432'
    volumes:
      - 'pgdata:/var/lib/postgresql/data/'
    environment:
      POSTGRES_PASSWORD: postgres

.env

DATABASE_URL="postgres://postgres:postgres@localhost:15432/postgres"

我还将ARM二进制目标添加到了schema.prisma模式中。


generator client {
  provider        = "prisma-client-js"
  binaryTargets   = ["native", "debian-openssl-1.1.x", "linux-arm-openssl-1.1.x", "linux-musl"]
  previewFeatures = ["orderByRelation", "selectRelationCount"]
}

Postgres容器实际上正在运行,我可以通过Docker Desktop仪表板看到它。在postgres容器内部我注意到了这个错误:

2021-07-21 12:52:58.927 UTC [76] ERROR:  relation "_prisma_migrations" does not exist at character 126

有人以前遇到过这个问题并找到了解决方案吗?

[编辑]

如何复现

克隆仓库,按照 README.md 的说明,在一台 M1 苹果芯片机器上看到预期的行为:https://github.com/baristikir/prisma-postgres-M1

5个回答

73

?connect_timeout=300添加到数据库连接字符串中就解决了问题。

DATABASE_URL="postgres://postgres:postgres@localhost:15432/postgres?connect_timeout=300"

2
很好,对我有用。 - Bjørson Bjørson
1
这两周一直遇到这个错误,非常感谢你! - Lukas Marschall
2
它确实起到了作用。不过我不知道为什么。 - Arslan Khan
3
不可能吧,这怎么可能行呢?而且还有36个赞。怎么添加连接超时就能解决问题呢?你能解释一下吗? - Subash Shrestha
万岁救星。哈利路亚。 - Allen
显示剩余5条评论

9

我在m1 mac mini上遇到了这个问题,解决方案是将node的版本从v16.16.0(镜像node:16)更改为v17.9.1(node:17),我们还尝试过node:18也可以正常工作。 我更改了Dockerfile: 从

FROM node:16

to

FROM node:17

17版本的阿尔派版不起作用。必须使用17版本。 - magentaqin
我花了很多时间来弄清楚这个问题。我用的是M2 MacBook Air,这个方法彻底解决了我的问题。更多人在需要时应该能够找到这个。非常感谢你的评论。 - RashadArbab

2

我之前使用的是 Node 的 16.17.0 版本。现在切换回了 16.13.2 版本,问题得到解决。


0

对我来说,我只需要更改数据库的URL:

DATABASE_URL="postgresql://root:root@<My IP>:5432/<MY DB Name>"

它运行良好。


"My IP" 是什么?你的公共本地IP还是127.0.0.1? - Leafyshark
希望能帮到您,这是“您的公共本地IP”。 - Bob Nguyen

0
我遇到了同样的问题,然后我添加了?connect_timeout=300,结果解决了。我意识到连接到数据库需要一些时间,特别是当它来自云服务提供商时,因此出现了这个错误。

这并不是对问题的回答。一旦您拥有足够的声望,您就可以评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Josua Marcel C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接