Next.js应用部署Cloud Run后无法连接Cloud SQL PostgreSQL
解决Cloud Run上Next.js连接Cloud SQL PostgreSQL时的ECONNREFUSED错误
你的错误connect ECONNREFUSED 127.0.0.1:5432说明应用在尝试通过本地TCP端口连接数据库,但Cloud Run与Cloud SQL的正确连接方式是使用Unix套接字,而非TCP localhost连接。下面是具体的修改步骤和检查项:
修改db.ts的数据库连接配置
假设你使用pg库(Next.js连接PostgreSQL的常用库),将原有的TCP连接配置替换为Unix套接字配置:
方式1:直接配置host参数
import { Pool } from 'pg'; // 初始化连接池 const pool = new Pool({ user: process.env.DB_USER, // 你的数据库用户名 password: process.env.DB_PASSWORD, // 你的数据库密码 database: process.env.DB_NAME, // 你的数据库名称 // 关键:使用Cloud SQL挂载的Unix套接字路径 host: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`, }); export default pool;
方式2:使用连接字符串
import { Pool } from 'pg'; // 构建Unix套接字连接字符串 const connectionString = `postgresql://${process.env.DB_USER}:${process.env.DB_PASSWORD}@/${process.env.DB_NAME}?host=/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`; const pool = new Pool({ connectionString, }); export default pool;
关键检查项
- 环境变量验证:确保Cloud Run服务已正确设置以下环境变量:
INSTANCE_CONNECTION_NAME:值为你的实例标识my-project:europe-north1:my-dbDB_USER、DB_PASSWORD、DB_NAME:对应你的PostgreSQL实例的认证信息和目标数据库名
- IAM权限确认:给Cloud Run的服务账号(默认是
[你的项目编号]-compute@developer.gserviceaccount.com)添加Cloud SQL Client角色,确保服务有权限访问Cloud SQL实例 - 连接方式确认:Cloud Run服务已添加正确的Cloud SQL连接(你已完成此步骤,可再次核对实例标识是否匹配)
修改后重新部署Cloud Run服务,即可解决连接拒绝的问题。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

