部署在Cloud Run的Rundeck如何连接Cloud SQL实例?
Cloud Run部署Rundeck无法连接Cloud SQL MySQL实例的问题排查与解决
核心排查与修复步骤
1. 补充数据库认证环境变量
你的Dockerfile中缺少数据库用户名和密码的环境变量配置,Rundeck需要这两个参数完成数据库认证:
# 建议部署时通过Cloud Run环境变量传递敏感信息,避免硬编码 ENV RUNDECK_DATABASE_USER=your-db-username ENV RUNDECK_DATABASE_PASSWORD=your-db-password
2. 更新Cloud SQL Socket Factory版本
当前使用的mysql-socket-factory-connector-j-8-1.2.1.jar版本过旧,与Rundeck 4.14内置的MySQL 8.x驱动兼容性不足,替换为最新稳定版本(如1.11.0):
RUN curl -L -o /home/rundeck/server/lib/mysql-socket-factory-connector-j-8.jar \ https://search.maven.org/remotecontent?filepath=com/google/cloud/sql/mysql-socket-factory-connector-j-8/1.11.0/mysql-socket-factory-connector-j-8-1.11.0.jar
3. 配置Cloud Run服务账号权限
Cloud Run服务运行时需要Cloud SQL Client角色才能访问Cloud SQL实例:
- 进入GCP控制台Cloud Run服务详情页,切换到「权限」标签
- 找到服务默认服务账号(格式:
PROJECT_ID@cloudservices.gserviceaccount.com) - 为该账号添加
Cloud SQL Client角色(角色ID:roles/cloudsql.client)
4. 关联Cloud Run与Cloud SQL实例
部署Cloud Run服务时,直接在「连接」模块选择目标Cloud SQL实例,自动配置网络通道,减少手动配置错误:
- 部署流程中找到「连接」→「Cloud SQL连接」,添加你的MySQL实例
- 此方式无需依赖Socket Factory的JDBC参数,稳定性更高
5. 确保Socket Factory依赖完整性
单独的Socket Factory JAR可能缺失核心依赖,建议通过Maven下载完整组件:
# 安装Maven并下载完整依赖 RUN apt-get install -y maven --no-install-recommends && \ mvn dependency:copy -Dartifact=com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.11.0:jar -DoutputDirectory=/home/rundeck/server/lib && \ mvn dependency:copy -Dartifact=com.google.cloud.sql:cloud-sql-core:1.11.0:jar -DoutputDirectory=/home/rundeck/server/lib && \ apt-get remove -y maven && rm -rf /var/lib/apt/lists/*
6. 检查启动脚本逻辑
确认start-rundeck.sh未覆盖Rundeck数据库配置环境变量,或未修改rundeck-config.properties导致配置冲突。
验证与日志排查
部署修改后的镜像后,通过Cloud Run日志定位具体错误:
- 进入服务详情页→「日志」标签
- 搜索
Database或SQLException关键词,根据错误信息精准修复:Access denied for user:检查用户名密码及数据库权限Could not create connection:排查Socket Factory依赖或Cloud SQL网络配置Timeout:确认服务账号权限及Cloud SQL实例状态
内容的提问来源于stack exchange,提问作者manthysBR
相关产品推荐
相关产品推荐

