使用Flask将Docker容器连接到PostgreSQL应用程序内引擎时出现问题
我想部署一个使用Orator作为ORM的Flask应用程序,但在连接到Google云平台中的SQL实例时遇到问题。我已经按照说明设置了所需的IAM权限,但仍然无法连接到实例。如果我手动设置实例IP的防火墙权限,则连接成功,但如果IP发生更改(更改了几次),我将无法再连接 这是我的Dockerfile:使用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:$
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
干杯