【问题标题】:Django in Google Cloud Run cant find /cloudsql socketGoogle Cloud Run 中的 Django 找不到 /cloudsql 套接字
【发布时间】:2021-01-10 14:17:37
【问题描述】:

我已经构建了一个 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",
    }
}

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

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

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

【问题讨论】:

  • 你能发布你的代码来说明你是如何连接到数据库的吗?您是否遵循此文档cloud.google.com/sql/docs/postgres/… cloud run 不会为您创建 /cloudsql 目录。你必须创建它
  • 你的数据库有公网IP还是你删除了?
  • 添加 Cloud SQL 连接后是否重新部署?
  • 您的容器中是否存在/cloudsql/ 目录?如果此目录尚不存在,则必须创建它。
  • 检查您的 IAM 设置。您的 Cloud Run 服务的服务帐号需要具有访问 Cloud SQL 的权限。 cloud.google.com/sql/docs/postgres/connect-run

标签: django postgresql google-cloud-platform google-cloud-sql google-cloud-run


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    此外,有关如何从 Cloud Run 连接到 Cloud SQL 的更多说明,您可以咨询此documentation

    【讨论】:

    • Cloud Run 会自动创建 /cloudsql 目录。我已经用 shellinabox docker 镜像对其进行了测试。文件夹在那里,但为空。我和@Forrest Keppler 有相同的项目设置
    猜你喜欢
    • 2014-05-12
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2020-05-27
    • 2020-02-23
    • 2021-12-25
    • 2017-12-05
    相关资源
    最近更新 更多