Возникли некоторые проблемы с docker-compose - PullRequest
1 голос
/ 24 апреля 2019

Я довольно новичок в фляге, postgres и докере. Я пытаюсь докеризировать наше приложение, чтобы новому разработчику не пришлось беспокоиться об установке зависимостей python, чтобы начать разработку. В настоящее время у меня есть два контейнера, один для приложения колбы и один для postgres db. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я соединяю эти две композиции, они не могут соединиться друг с другом. Я определил свою собственную сеть, чтобы убедиться, что они работают в одной и той же сети, но это все еще не решает проблему. Когда я запускаю приложение колбы за пределами контейнера и пытаюсь подключиться к контейнеру postgres db, у меня не возникает проблем с подключением, и все работает нормально.

Любая помощь будет высоко ценится Заранее спасибо

Dockerfile для приложения фляги

FROM python:3.7-alpine3.7

LABEL maintainer="uwblueprint"
LABEL org.label-schema.schema-version="1.0"
LABEL org.label-schema.name="elevate-api"
LABEL org.label-schema.vcs-url="https://gitlab.com/uwblueprint/elevate-api/"
LABEL org.label-schema.vendor="UW Blueprint"

## Copy source and environment-config files.
COPY app/ ./app/
WORKDIR /app

COPY Pipfile Pipfile.lock ./

## Install external dependencies.
RUN apk add --no-cache libpq


## Install application dependencies.
RUN apk add --no-cache --virtual build-deps \
        gcc musl-dev postgresql-dev libffi-dev && \
    pip3 install --upgrade pip pipenv gunicorn && \
        pipenv --python 3.7 && \
        pipenv install --system --deploy && \
    apk del build-deps

EXPOSE 5000
CMD ["flask", "run"]

Файл создания Docker

version: '3.7'
services:
  database:
    image: registry.gitlab.com/uwblueprint/elevate-api/postgres:latest
    build:
      context: ./external/postgres
      cache_from:
        - registry.gitlab.com/uwblueprint/elevate-api/postgres:latest
        - postgres:10.5-alpine
    container_name: database
    env_file: ./external/postgres/configs/.env
    volumes:
      - postgres.data:/var/lib/postgresql/data # persist data
    ports:
      - "5432:5432"
    networks:
      - "api_net"

  api:
    build: .
    ports:
      - "5000:5000"
    networks:
      - "api_net"
networks:
  api_net:
volumes:
  postgres.data:

Код Python SQL Alchemy

import os
from flask_sqlalchemy import SQLAlchemy
from app import app

# Make sure that DB_PASS is an environment variable:
##if 'DB_PASS' not in os.environ:
##    raise EnvironmentError("Could not find environment variable 'DB_PASS',")

##user = os.environ.get("DB_USER", "robot")
user ="fakeUser"
password = "fakePassword"

##password = os.environ["DB_PASS"]
host = os.environ.get("DB_HOST", "0.0.0.0")
port = os.environ.get("DB_PORT", "5432")
name = os.environ.get("DB_NAME", "elevate")

# Configure flask-sqlalchemy.
app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://%s:%s@%s:%s/%s" % (
    user, password, host, port, name
)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# TODO: Find the optimal pool recycle time for PostgreSQL.
app.config["SQLALCHEMY_POOL_RECYCLE"] = 7200  # in milliseconds

# The db object is aware of the Flask application lifecycle, and will do things
# like close the database session when a Flask request ends.
#
# This saves a lot of headaches compared to the plain SQLAlchemy library, where
# I kept running into issues about database-session related objects trying
# to access the session when I had closed it prematurely (due to SQLAlchemy's
# lazy-loading data acess methods).
db = SQLAlchemy(app)

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Внутри docker-compose вы можете устанавливать связь между сервисами по именам сервисов. Вы можете прочитать об этом в документации .

По умолчанию Compose настраивает единую сеть для вашего приложения. Каждый контейнер для службы присоединяется к сети по умолчанию и доступен как другим контейнерам в этой сети, так и обнаруживается ими с именем хоста, идентичным имени контейнера.

Установите host или DB_HOST и database. 127.0.0.1 не будет работать.

0 голосов
/ 24 апреля 2019

Установите DB_HOST в значение «database», которое является именем контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...