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

如何将本地Docker化的Postgres服务暴露至公网?

解决方法

方案1:直接用Fly.io托管PostgreSQL(最省心)

既然已经在Fly.io上构建镜像,没必要折腾本地数据库的公网暴露,直接用Fly的托管Postgres更稳定:

  • 执行 fly postgres create 跟着向导创建数据库实例,记好实例名称
  • 把你的database-service和这个Postgres实例绑定:fly postgres attach <postgres实例名> --app <你的database-service应用名>
  • Fly会自动给你的database-service注入DATABASE_URL环境变量,直接在Prisma的schema.prisma里用这个变量就行,不用手动写链接地址

方案2:修复ngrok转发本地Postgres的问题

如果一定要用本地Postgres,检查以下配置:

  • 打开本地Postgres的postgresql.conf,把listen_addresses改成'*',允许外部访问
  • 修改pg_hba.conf,加一行 host all all 0.0.0.0/0 scram-sha-256(如果你的认证方式是md5就改成md5),放开所有IP的访问权限
  • 重启Postgres服务
  • 启动ngrok的时候要用TCP模式:ngrok tcp 5432,Postgres是TCP协议,不能用HTTP模式
  • 拿到ngrok给出的公网地址(比如tcp://0.tcp.ngrok.io:12345),转成Prisma能用的URL:postgresql://<用户名>:<密码>@0.tcp.ngrok.io:12345/<数据库名>?schema=public
  • 用prisma db pull测试能不能连接上

方案3:调整本地Docker构建适配Apple Silicon

本地构建失败的问题其实可以解决,不用非要去云端构建:

  • 在Dockerfile里指定构建架构:FROM --platform linux/amd64 node:<版本号>,或者用Prisma的多架构镜像
  • 用Docker Buildx构建多架构镜像:docker buildx build --platform linux/amd64 -t <镜像名> .
  • 构建成功后,database-service可以直接通过Docker Compose的内部网络访问Postgres,链接地址写postgresql://<用户名>:<密码>@postgres:5432/<数据库名>?schema=public就行,不用暴露公网端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:03