Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 有没有办法通过docker容器内的代理访问google cloud SQL_Google Cloud Platform_Google Compute Engine_Google Cloud Sql - Fatal编程技术网

Google cloud platform 有没有办法通过docker容器内的代理访问google cloud SQL

Google cloud platform 有没有办法通过docker容器内的代理访问google cloud SQL,google-cloud-platform,google-compute-engine,google-cloud-sql,Google Cloud Platform,Google Compute Engine,Google Cloud Sql,我有多台docker机器(dev,staging)运行在Google Compute Engine上,它托管Django服务器(这需要访问Google Cloud SQL access)。我有多个Google Cloud SQL实例正在运行,每个实例都由我的Google Compute Engine实例上相应的docker机器使用 目前,我正在通过白名单我的计算引擎IP访问云SQL。但是我不想使用ip,原因很明显,例如,我的开发机器不使用静态ip 但现在想用谷歌云代理的方式来获得访问权。但是我该

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

目前,我正在通过白名单我的计算引擎IP访问云SQL。但是我不想使用ip,原因很明显,例如,我的开发机器不使用静态ip

但现在想用谷歌云代理的方式来获得访问权。但是我该怎么做呢!GCP提供了多种访问google云SQL实例的方法。但是没有一个适合我的用例:

我有这个选择;但是这个

  • 仅允许我的计算机引擎访问SQL实例;我必须从我的码头工人那里进入
  • 这不支持我在同一台计算引擎机器上代理多个SQL实例;如果可能的话,我希望在docker内部做这个代理
    那么,如何访问Docker内部的云SQL?如果docker compose是一个更好的开始方式;kubernetes实现起来有多容易(我使用google容器引擎进行生产)

    通过使用docker compose,我能够了解如何在本地docker环境中使用cloudsql代理。您将需要拉下您的云SQL实例凭据并准备好它们。我将它们作为
    credentials.json
    保存在我的项目根目录中,并将其添加到项目中的
    .gitignore

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

    注意:请记住,我正在编写一个TomcatJava应用程序,我的
    dockercompose.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
    
    版本:“3”
    服务:
    cloudsql代理:
    容器名称:cloudsql代理
    图片:gcr.io/cloudsqldocker/gce代理:1.11
    命令:/cloud\u sql\u proxy--dir=/cloudsql-instances==tcp:0.0.0:5432-credential\u file=/secrets/cloudsql/credentials.json
    端口:
    - 5432:5432
    卷数:
    -./credentials.json:/secrets/cloudsql/credentials.json
    重新启动:始终
    tomcatapp api:
    容器名称:tomcatapp api
    生成:。
    卷数:
    -./build/libs:/usr/local/tomcat/webapps
    端口:
    - 8080:8080
    - 8000:8000
    环境文件:
    -/secrets.env
    重新启动:始终
    
    单个云SQL代理可以代理多个实例。你需要有多个代理的原因是什么?我读了一些东西,意识到你说的是真的。所以我的第二个问题现在无效了。。你对Q1有什么想法吗。。我怎样才能在单个Docker中访问这个代理连接?我不确定我是否完全理解这个问题。您可以将代理作为单独的docker映像()运行,然后根据您的答案从docker映像连接到代理。我看得出你明白我的问题。连接docker就是我在问题中使用docker compose的意思。我看到docker compose是一个选项。但我只是在探索这是否是最好的选择。如果你从GCE实例连接静态IP,你可以选择将这些IP列入白名单,并直接通过IP连接。如果您不想维护IP白名单,那么使用代理docker容器是您最好的选择。有趣的是,谢谢Dan,我们使用了类似的方法:)谢谢您发布您的答案。我可以知道为什么
    重新启动:总是
    用于
    cloudsql代理
    ?我想通过这样的docker-compose.yml在GCE上运行。但是,我的应用程序无法连接到
    cloudsql proxy
    。它返回
    错误:[Errno-2]名称或服务未知
    。你知道怎么解决吗?3xX您不能通过“cloudsql代理”而不是“0.0.0.0”进行连接吗?