Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
使用Flask将Docker容器连接到PostgreSQL应用程序内引擎时出现问题_Postgresql_Google App Engine_Docker_Flask_Google Cloud Sql - Fatal编程技术网

使用Flask将Docker容器连接到PostgreSQL应用程序内引擎时出现问题

使用Flask将Docker容器连接到PostgreSQL应用程序内引擎时出现问题,postgresql,google-app-engine,docker,flask,google-cloud-sql,Postgresql,Google App Engine,Docker,Flask,Google Cloud Sql,我想部署一个使用Orator作为ORM的Flask应用程序,但在连接到Google云平台中的SQL实例时遇到问题。我已经按照说明设置了所需的IAM权限,但仍然无法连接到实例。如果我手动设置实例IP的防火墙权限,则连接成功,但如果IP发生更改(更改了几次),我将无法再连接 这是我的Dockerfile: FROM gcr.io/google-appengine/python RUN virtualenv /env ENV VIRTUAL_ENV /env ENV PATH /env/bin:$

我想部署一个使用Orator作为ORM的Flask应用程序,但在连接到Google云平台中的SQL实例时遇到问题。我已经按照说明设置了所需的IAM权限,但仍然无法连接到实例。如果我手动设置实例IP的防火墙权限,则连接成功,但如果IP发生更改(更改了几次),我将无法再连接

这是我的Dockerfile:

FROM gcr.io/google-appengine/python

RUN virtualenv /env

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

ADD . /app

CMD gunicorn -b :$PORT main:app
这是我的应用程序。yaml:

runtime: custom
env: flex

env_variables:
  POSTGRES_HOST: <SQL-INSTANCE-IP>
  POSTGRES_DB: <MY-POSTGRES-DB>
  POSTGRES_USER: <MY-POSTGRES-USER>
  POSTGRES_PASSWORD: <MY-POSTGRES-PASSWORD>

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
runtime: custom
env: flex

env_variables:
  POSTGRES_HOST: "/cloudsql/<INSTANCE-CONNECTION-NAME>"
  POSTGRES_DB: <MY-POSTGRES-DB>
  POSTGRES_USER: <MY-POSTGRES-USER>
  POSTGRES_PASSWORD: <MY-POSTGRES-PASSWORD>

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
运行时:自定义
环境:柔性
环境变量:
POSTGRES_主机:
博士后数据库:
POSTGRES_用户:
POSTGRES_密码:
自动缩放:
最小数量实例:1
最大数量实例:1

问题是在我的docker映像中没有执行cloud\u sql\u代理。为此,我必须创建如下脚本:

运行app.sh

#!/bin/bash

/app/cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE-CONNECTION-NAME> -credential_file=<CREDENTIAL-FILE> &
gunicorn -b :$PORT main:app
然后更改我的Dockerfile,使其下载cloud\u sql\u代理,创建/cloudsql目录并执行新的\u脚本:

FROM gcr.io/google-appengine/python

RUN virtualenv /env

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O /app/cloud_sql_proxy
RUN chmod +x /app/cloud_sql_proxy
RUN mkdir /cloudsql; chmod 777 /cloudsql

ADD . /app

CMD /app/run_app.sh
最后在我的应用程序中更改了POSTGRES_主机。yaml:

runtime: custom
env: flex

env_variables:
  POSTGRES_HOST: <SQL-INSTANCE-IP>
  POSTGRES_DB: <MY-POSTGRES-DB>
  POSTGRES_USER: <MY-POSTGRES-USER>
  POSTGRES_PASSWORD: <MY-POSTGRES-PASSWORD>

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
runtime: custom
env: flex

env_variables:
  POSTGRES_HOST: "/cloudsql/<INSTANCE-CONNECTION-NAME>"
  POSTGRES_DB: <MY-POSTGRES-DB>
  POSTGRES_USER: <MY-POSTGRES-USER>
  POSTGRES_PASSWORD: <MY-POSTGRES-PASSWORD>

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
运行时:自定义
环境:柔性
环境变量:
POSTGRES\u主机:“/cloudsql/”
博士后数据库:
POSTGRES_用户:
POSTGRES_密码:
自动缩放:
最小数量实例:1
最大数量实例:1
干杯