首页 > 解决方案 > 如何解决 cloudsql-docker/gce-proxy 和已部署的 Python 容器之间的连接失败问题

问题描述

我一直致力于将一个简单的 Django 项目部署到 Google Cloud Platform。

然而,部署的应用程序总是失败,基本上是这样的:

Django Version: 2.1.3
Exception Type: OperationalError
Exception Value:
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Exception Location: /env/lib/python3.6/site-packages/psycopg2/__init__.py in connect, line 130
Python Executable:  /env/bin/python3
Python Version: 3.6.7

我可以在本地使用完全相同的 django 项目部署 - 连接到已部署的应用程序尝试连接的同一个云 sql 实例,并且工作正常。我可以通过简单地终止本地 cloud_sql_proxy 在本地复制错误。

这告诉我 python/django 应用程序在本地和部署时都运行相同。Cloud SQL 数据库也工作正常,但由于某种原因,我使用的已部署映像 gcr.io/cloudsql-docker/gce-proxy:1.05 无法正常工作,或者我部署的应用程序无法连接到该代理。

我已经部署了几次 Django Polls 应用程序 [ https://cloud.google.com/python/django/kubernetes-engine] ,这是社区众所周知的,并且成功地完成了几次以培养一些熟悉度,然后将相同的步骤应用于我自己的项目作为解决此问题的一种方式。

我的 pod 日志没有显示任何错误。我已经将我的 .yaml 和 Dockerfiles 与许多有效的示例进行了比较,并且没有发现任何问题,SO 上的其他相关问题似乎也没有解决这个问题。

作为一个学习过程,我已经尝试了一天左右的故障排除,但没有取得进一步的进展。

一些帮助解决此问题将不胜感激。

标签: djangogoogle-cloud-platformgoogle-cloud-sql

解决方案


我的故障排除中的差距是我不知道检查 pod 日志并没有给我来自 sql-proxy 组件的日志,只有 app 组件。当我检查来自 sql 代理的日志时,很明显没有为该项目启用 Cloud SQL Admin API。启用它可以解决问题。

希望这个答案可以帮助其他谷歌用户。


推荐阅读