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

Google Cloud Build执行数据库迁移时报ENOTFOUND错误如何解决

报错诱因与解决方案

报错诱因

你遇到的getaddrinfo ENOTFOUND错误核心原因是配置字段使用错误:

  • Sequelize的MySQL连接逻辑中,host参数仅用于TCP连接的域名/IP解析,你将Cloud SQL代理生成的Unix套接字路径填写到了host字段,Sequelize会尝试对该路径字符串做DNS解析,自然无法找到对应地址。
  • Cloud SQL代理在你指定的/workspace目录下生成的是Unix套接字文件,走本地文件通信,不需要走TCP域名解析逻辑,需要使用专门的套接字配置字段。

解决步骤

  1. 修改Sequelize数据库配置
    将config/config.js中的host字段替换为socketPath字段,明确指定Unix套接字连接:
module.exports = {
  production: {
    username: process.env.PROD_DB_USERNAME,
    password: process.env.PROD_DB_PASSWORD,
    database: process.env.PROD_DB_NAME,
    dialect: 'mysql',
    // 替换原host字段,指定Unix套接字路径
    socketPath: `/workspace/${process.env.INSTANCE_CONNECTION_NAME}`,
    // 补充dialectOptions配置,适配底层MySQL驱动的套接字识别逻辑
    dialectOptions: {
      socketPath: `/workspace/${process.env.INSTANCE_CONNECTION_NAME}`
    }
  }
}
  1. 核对环境变量配置
    确认Cloud Build触发器的环境变量中已经正确配置INSTANCE_CONNECTION_NAME,取值为你的Cloud SQL实例完整连接名(格式为项目ID:区域:实例名),需和代理启动命令中填写的<MY-INSTANCE-NAME>完全一致。
  2. 可选:优化代理启动参数
    由于你已经为Cloud SQL实例开启了公网IP,可以在代理启动命令中添加公网优先级参数,避免代理优先尝试私网连接导致的超时问题,将cloudbuild.yaml中migrate步骤的args参数调整为:
args:
  - "-c"
  - "(/workspace/cloud_sql_proxy -dir=/workspace -instances=<MY-INSTANCE-NAME> -ip_address_types=PUBLIC & sleep 2) && ./node_modules/.bin/sequelize db:migrate"

注意:后续将应用部署到Cloud Run运行时,Cloud SQL默认的套接字路径为/cloudsql/[实例连接名],需要将运行时的socketPath配置同步修改为对应路径,不要和Cloud Build环节的/workspace路径混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:48:04