在Google Cloud Run部署Django后端时的端口及数据库错误求助
解决Google Cloud Run部署Django后端的三个问题
一、数据库连接失败(错误码2002/115)
- 修正Cloud SQL授权方式:Cloud Run实例出站IP是动态的,直接添加单个公网IP到Cloud SQL授权列表无法覆盖所有情况。临时测试可在Cloud SQL实例「连接」页面的「授权网络」中添加
0.0.0.0/0;生产环境建议使用Cloud SQL Auth Proxy:部署Cloud Run服务时启用「Cloud SQL连接」并选择目标MySQL实例,同时修改Django数据库配置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': '/cloudsql/你的项目ID:区域:实例ID', 'PORT': '3306', } } - 调整迁移命令执行时机:
makemigrations需在本地开发环境执行,生成迁移文件后打包进镜像。容器启动时仅执行migrate即可,避免多实例启动时出现迁移冲突,同时减少启动阶段的阻塞风险。
二、端口监听与探针失败问题
- 改用PORT环境变量配置端口:Cloud Run要求容器监听平台指定的PORT环境变量(即使你手动设置了6000,也需用变量兼容平台规则),修改Dockerfile的CMD指令:
确保Django监听EXPOSE 6000 CMD python manage.py migrate && python manage.py runserver 0.0.0.0:$PORT0.0.0.0(允许外部访问),而非127.0.0.1(仅限容器内部)。 - 优先解决数据库阻塞问题:数据库连接失败会导致
migrate命令卡住,容器无法执行到runserver步骤,自然不会监听端口,最终触发探针失败。需先确保数据库连接正常,再验证端口监听逻辑。
额外排查建议
- 本地预测试:在本地用Docker运行镜像,设置
PORT=6000并配置正确的数据库连接,确认容器能正常启动并响应请求后再上传至Cloud Run。 - 查看Cloud Run日志:进入服务的「日志」页面,查看启动阶段的详细输出,确认是卡在
migrate还是runserver环节,精准定位问题。
内容的提问来源于stack exchange,提问作者noodles888
相关产品推荐
相关产品推荐

