Проблемы с подключением контейнера Docker к PostgreSQL в App Engine с помощью Flask - PullRequest
0 голосов
/ 23 июня 2018

Я хочу развернуть приложение Flask, которое использует Orator в качестве ORM, и у меня возникают проблемы с подключением к экземпляру SQL в Google Cloud Platform. Я уже настроил необходимые разрешения 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

Это мой 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

1 Ответ

0 голосов
/ 23 июня 2018

Проблема заключалась в том, что cloud_sql_proxy не выполнялся в моем образе докера. Для этого мне пришлось создать такой скрипт:

run_app.sh

#!/bin/bash

/app/cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE-CONNECTION-NAME> -credential_file=<CREDENTIAL-FILE> &
gunicorn -b :$PORT main:app

Затем дайте ему разрешение на выполнение:

chmod +x run_app.sh

Затем изменил мой Dockerfile, чтобы он загружал cloud_sql_proxy, создавал каталог / cloudsql и выполнял скрипт new_script:

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_HOST в моем app.yaml:

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

Приветствия

...