Google Cloud 运行 中的 Django 找不到 /cloudsql 套接字

Django in Google Cloud Run cant find /cloudsql socket

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

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",
    }
}

并且我已确保创建与数据库的连接

据我所知,cloud 运行 应该神奇地挂载一个 django 可以用来连接到 postgres 的 /cloudsql,但错误暗示它没有被挂载。

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

Cloud 运行 不会为您创建 /cloudsql 目录。你必须创建它。

此外,有关如何从云 运行 连接到云 SQL 的更多说明,您可以参考此 documentation

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

结尾的主体

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