如何在Docker中通过Prisma连接主机本地PostgreSQL数据库?
解决Prisma容器连接本地PostgreSQL的问题
我来帮你一步步排查并解决这个问题,你遇到的Project not found: 'default$default'错误和连接失败的情况,主要是因为Docker容器访问本地数据库的配置、PostgreSQL的权限设置,还有Prisma的部署步骤没到位导致的。
1. 先让本地PostgreSQL允许外部连接
Prisma运行在Docker容器里,对本地PostgreSQL来说属于“外部访问”,所以得先修改PostgreSQL的配置,放开权限:
- 找到
postgresql.conf文件(Mac上一般在/usr/local/var/postgres/或者/Library/PostgreSQL/{版本}/data/),把listen_addresses改成*,也就是listen_addresses = '*',允许所有IP访问。 - 找到
pg_hba.conf文件(同目录下),添加一行配置:host all all 0.0.0.0/0 md5,这是允许所有外部IP用密码方式连接数据库。 - 修改完后重启PostgreSQL服务,比如用命令
brew services restart postgresql(如果你是用Homebrew装的)。
2. 修正Docker里的主机地址(Mac环境)
你之前用的docker.for.mac.host.internal是旧版本Docker的写法,现在Mac上Docker访问本地主机的标准地址是host.docker.internal,先把这个地址替换到你的配置里。
3. 补全并修正docker-compose.yml配置
你的docker-compose.yml内容不完整,正确的配置需要包含Prisma连接PostgreSQL的所有信息,参考下面的示例:
version: '3' services: prisma: image: prismagraphql/prisma:1.8 restart: always ports: - "4466:4466" environment: PRISMA_CONFIG: | port: 4466 databases: default: connector: postgres host: host.docker.internal port: 5432 user: 你的PostgreSQL用户名 password: 你的PostgreSQL密码 database: 要连接的数据库名 ssl: false # 本地数据库一般没开SSL,设为false就行
记得把上面的占位信息换成你本地PostgreSQL的实际内容,比如用户名默认是postgres,数据库要提前在本地创建好哦。
4. 重启Prisma服务
执行下面的命令,让新的配置生效:
docker-compose down docker-compose up -d
5. 解决Project not found: 'default$default'错误
这个错误是因为Prisma还没有在你的数据库里创建对应的项目结构,你需要执行部署命令:
prisma deploy
如果是第一次部署,它会引导你选择本地的Prisma服务地址(默认是http://localhost:4466),确认后就会自动在数据库中创建Prisma需要的表和数据结构,完成后再访问Playground就正常了。
额外检查点
- 确认本地PostgreSQL的5432端口没有被其他程序占用,可以用
lsof -i :5432命令查看。 - 检查防火墙设置,确保Docker容器能访问本地的5432端口。
内容的提问来源于stack exchange,提问作者wazzaday
相关产品推荐
相关产品推荐

