Google Cloud Build配置Cloud SQL代理仍提示无法连接数据库服务器
问题根源与解决方法
1. 修正DATABASE_URL的连接方式
你的Cloud SQL代理通过TCP模式启动(监听127.0.0.1:5432),但DATABASE_URL里指定了Unix套接字路径host=/cloudsql/CONNECTION_NAME,导致Prisma试图通过套接字连接,而非TCP连接代理。
修改DATABASE_URL为:
DATABASE_URL=postgresql://USER:PASSWORD@localhost/DATABASE
2. 确保Cloud Build服务账号拥有Cloud SQL Client权限
Cloud Build默认使用的服务账号需具备Cloud SQL Client角色,否则代理无法建立到Cloud SQL实例的连接:
- 进入Google Cloud控制台的IAM与管理 → IAM
- 找到
[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com账号 - 为其添加
Cloud SQL Client角色
3. 优化代理启动后的等待逻辑
固定的sleep 3可能不足以让代理完全建立连接,替换为等待5432端口可用的逻辑更可靠,比如用nc命令:
./cloud_sql_proxy -instances=CONNECTION_NAME=tcp:5432 & # 等待端口可用 until nc -z localhost 5432; do sleep 1 done
修正后的cloudbuild.yaml步骤2示例
- name: 'gcr.io/${INSTANCE_NAME}' entrypoint: sh env: - DATABASE_URL=postgresql://USER:PASSWORD@localhost/DATABASE args: - -c - | wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy chmod +x cloud_sql_proxy ./cloud_sql_proxy -instances=CONNECTION_NAME=tcp:5432 & until nc -z localhost 5432; do sleep 1 done npx prisma migrate deploy
内容的提问来源于stack exchange,提问作者Bowis
相关产品推荐
相关产品推荐

