Laravel项目部署GCP Cloud Run后无法连接CloudSQL求助
Laravel容器化部署GCP Cloud Run后SQL连接失败解决方案
问题核心
错误SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed表明Laravel容器无法解析mysql主机名——这是因为本地Docker Compose的服务名在Cloud Run环境中不生效,必须替换为Cloud SQL的正确连接配置。
排查修复步骤
1. 修正数据库连接配置
Laravel的.env或配置文件中,数据库主机不能再使用mysql,需按以下方式调整:
- 推荐:使用Cloud SQL Auth Proxy
设置DB_HOST=127.0.0.1、DB_PORT=3306,Cloud Run关联的SQL连接器会自动在容器内监听3306端口,转发请求到Cloud SQL实例。 - 测试用:使用公网IP
直接填写Cloud SQL实例的公网IP,同时确保Cloud SQL的授权网络包含Cloud Run的出站IP(临时测试可设为0.0.0.0/0)。
2. 检查Cloud Run与Cloud SQL关联配置
- 确认Cloud Run部署时已添加Cloud SQL实例连接,选择正确的实例和数据库类型(MySQL)。
- 验证VPC网络一致性:Cloud SQL实例与Cloud Run服务需在同一VPC,或通过VPC peering连通(私有网络场景)。
3. 验证容器环境变量与构建配置
- 检查Dockerfile是否正确传递环境变量,或在Cloud Run部署时手动设置
DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD,避免沿用本地Docker Compose的默认值。 - 可在容器内执行
telnet 127.0.0.1 3306测试连通性,确认Auth Proxy是否正常运行。
4. 检查Cloud SQL实例状态与权限
- 确认Cloud SQL实例处于运行状态,目标数据库已创建且数据表导入完成。
- 验证数据库用户权限:确保所用用户拥有目标数据库的读写权限,主机授权设为
%(公网场景)或关联Cloud Run服务账号(私有网络场景)。
关键配置示例
修正后的.env(Auth Proxy模式)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_db_name DB_USERNAME=your_db_user DB_PASSWORD=your_db_password
Cloud Run部署要点
- 部署时必须在Cloud SQL connections中选择目标实例,GCP会自动管理Auth Proxy进程,无需手动启动。
- 确保Cloud Run服务账号拥有
Cloud SQL Client角色权限,否则无法建立连接。
内容的提问来源于stack exchange,提问作者Jessica Kimble
相关产品推荐
相关产品推荐

