当前位置: 首页 > 知识库问答 >
问题:

有没有办法通过docker容器内的代理访问谷歌云SQL

耿志义
2023-03-14

我有多个docker机器(dev,staging)在托管Django服务器的Google Compute Engine上运行(这需要访问Google Cloud SQL访问)。我有多个 Google Cloud SQL 实例正在运行,每个实例都由我的 Google Compute Engine 实例上的相应 docker 计算机使用。

目前,我正在通过将我的计算引擎 IP 列入白名单来访问云 SQL。但是出于显而易见的原因,我不想使用 IP,即我不为我的开发机器使用静态 IP。

但是现在想使用google_cloud_proxy的方式来获得访问权限。但是我该怎么做!GCP 提供了多种访问 google Cloud SQL 实例的方法。但它们都不适合我的用例:

我有这个选项 https://cloud.google.com/sql/docs/mysql/connect-compute-engine;但是这个

  1. 只允许我的计算机引擎访问 SQL 实例;我必须从我的 Docker 访问该实例。
  2. 这不支持我在同一台计算引擎计算机上代理多个 SQL 实例;如果可能的话,我希望在码头工人中做这个代理.

那么,我如何访问 Docker 中的 CLoud SQL?如果 docker 撰写是更好的开始方式;为kubernetes实现它有多容易(我使用谷歌容器引擎进行生产)

共有2个答案

何昆
2023-03-14

您可以在此处参考Google文档:https://cloud.google.com/sql/docs/postgres/connect-admin-proxy#connecting-docker

这将向您展示如何在容器上运行代理。然后,您可以按照此处建议的答案使用docker-compose@Dan:https://stackoverflow.com/a/48431559/14305096

 docker run -d \
      -v PATH_TO_KEY_FILE:/config \
      -p 127.0.0.1:5432:5432 \
      gcr.io/cloudsql-docker/gce-proxy:1.19.1 /cloud_sql_proxy \
      -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:5432 \
      -credential_file=/config
施华奥
2023-03-14

我能够弄清楚如何使用 docker-compose 在我的本地 docker 环境中使用 cloudsql-proxy。您需要下拉云 SQL 实例凭据并准备就绪。我将它们作为credentials.json保存在我的项目根目录中,并将其添加到项目中的.gitignore 中。

我发现的关键部分是在 GCP 实例 ID 后使用 =tcp:0.0.0.0:5432,以便可以转发端口。然后,在您的应用程序中,使用 cloudsql-proxy 而不是 localhost 作为主机名。确保其余的数据库信条在应用程序密钥中有效,以便它可以通过 cloudsql-proxy 容器提供的本地代理进行连接。

注意:请记住,我正在编写一个tomcat java应用程序,我的docker-compose.yml反映了这一点。

docker-compose.yml:

version: '3'
services:
  cloudsql-proxy:
      container_name: cloudsql-proxy
      image: gcr.io/cloudsql-docker/gce-proxy:1.11
      command: /cloud_sql_proxy --dir=/cloudsql -instances=<YOUR INSTANCE ID HERE>=tcp:0.0.0.0:5432 -credential_file=/secrets/cloudsql/credentials.json
      ports:
        - 5432:5432
      volumes:
        - ./credentials.json:/secrets/cloudsql/credentials.json
      restart: always

  tomcatapp-api:
    container_name: tomcatapp-api
    build: .
    volumes:
      - ./build/libs:/usr/local/tomcat/webapps
    ports:
      - 8080:8080
      - 8000:8000
    env_file:
      - ./secrets.env
    restart: always
 类似资料:
  • 我在Amazon linux ec2上安装了dd-agent。如果我直接在主机上运行我的python脚本(我使用了名为"dogstatsd-python"的SDK),所有指标都可以发送到datadog(我登录到datadoghq.com并在那里看到了指标)。脚本类似: 然而,我启动了一个docker容器,并从容器内部运行相同的脚本: '172.14.0.1'是主机的IP,它是用命令提取的 根本没有

  • 假设我有三个带有nginx的docker容器。它们暴露的端口分别映射到8080、8181和8282。我想在8080上配置服务器,将/example01和/example02代理给另外两个应用程序。这是我的配置文件: 因此,如果我运行容器,每个应用程序都是可访问的(http://localhost:8080、http://localhost:8181和http://localhost:8282)。

  • 问题内容: 我需要在Windows 2016 Server上使用Docker / Windows容器并为其准备Windows应用程序才能在其上运行。通过Powershell配置Windows并不像在Ubuntu上那样方便,尤其是如果您从未真正使用过Windows Server并且需要学习所有Powershell命令时,尤其如此;) 是否可以通过GUI访问Windows容器? 可以在Docker,U

  • 有没有办法在Docker内部运行LXD?eg. 在使用ubuntu 16.04的主机上: 在容器中: LXD守护进程可以工作,但由于cgroups错误,我无法启动LXD容器。 我也尝试过:

  • 我想使用azure密钥库来存储没有azure ad身份验证的控制台应用程序的连接字符串。 那么,没有Azure AD有没有办法访问Azure密钥库呢?

  • 我不熟悉Java/spring boot,我正尝试使用谷歌的云SQL作为我项目的数据库。我已经下载了谷歌代理并使用谷歌云SDK进行了身份验证。当我启动代理并使用SSMS连接时,它会连接并正常工作。问题是,当我尝试通过spring boot应用程序连接时,我会出错。我不确定我是否在应用程序属性中遗漏了什么,或者忘记了导入依赖项或类似的东西。任何帮助都将不胜感激!我已经包括了应用程序。属性,生成。gr

  • 我正在尝试在我的节点中获取谷歌云存储(GCS)的图像文件。使用Axios客户端的js应用程序。在使用PC的开发模式下,我传递了一个承载令牌,所有这些都正常工作。 但是,我需要在Google Kubernetes Engine(GKE)上托管的集群的生产中使用它。 我做了推荐的教程来创建一个服务号(GSA),然后我vinculed与kubernetes帐户(KSA),通过工作负载身份方法,但当我尝试

  • 我想使用gsutil和服务帐户在命令行上访问Goolge播放报告。有一个云存储URI,格式为gs://bucket\u name,我可以用我的用户帐户列出和下载报告,但不能用我创建的服务帐户。错误总是相同的: 我已向服务帐户授予了所有必需的权限,因此我不明白为什么用户帐户可以使用,而服务帐户却无法使用。 所以如果你知道如何帮助我,我会非常感谢你。