首页 > 解决方案 > Google Cloud Run 中的 Django 找不到 /cloudsql 套接字

问题描述

我有一个已构建的 dockerized django 应用程序,上传到 GCR,然后部署为谷歌云运行服务。但是,启动时出现以下错误(来自云运行日志):

psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running locally and accepting 
connections on Unix domain socket "/cloudsql/kingdoms-289503:us-west1:kingdomsdb/.s.PGSQL.5432"?

我的 django 数据库设置如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': "/cloudsql/kingdoms-289503:us-west1:kingdomsdb",
        'USER': "postgres",
        'PASSWORD': "password",
        'NAME': "postgres",
    }
}

而且我已经确保创建到数据库的连接

cloudsql 连接

据我了解,云运行应该神奇地挂载一个 at /cloudsql django 可以用来连接到 postgres,但错误意味着它没有被挂载。

是否需要检查额外的配置以确保套接字存在?是否有不涉及此套接字的连接到 cloudsql 的替代方法?

标签: djangopostgresqlgoogle-cloud-platformgoogle-cloud-sqlgoogle-cloud-run

解决方案


正如@glasnt 上面提到的,它也可能是 ACL 问题。服务帐户需要该Cloud SQL Client角色。在默认情况下,Default compute service account是以 . 结尾的主体 compute@developer.gserviceaccount.com

我的问题是我没有选择添加我的新手直觉引导我的角色,即 Cloud Run 服务资源。相反,请转到主 IAM 设置、IAM 选项卡,然后手动将权限添加到服务账户。如果您在列表中没有看到服务帐户,因此无法编辑其角色,您可以转到Add +(顶部工具栏)并手动输入电子邮件地址。


推荐阅读