Как установить переменные среды на Flask / MongoDB на AWS ECS? - PullRequest
1 голос
/ 08 октября 2019

У меня есть приложение фляги, которое работает с MongoDB.

Локально. Когда я собираю и запускаю контейнер с использованием следующего ниже, приложение отлично работает локально.

docker-compose build
docker-compose up

Этиявляются созданные контейнеры:

/application$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
9e054b28bb46        application_web     "/bin/sh -c 'python …"   38 seconds ago      Up 37 seconds       0.0.0.0:80->80/tcp, 27017/tcp   application_web_1
2a19a8e9a267        mongo:3.0.2         "/entrypoint.sh mong…"   39 seconds ago      Up 38 seconds       0.0.0.0:27017->27017/tcp        application_db_1

В моем app.py есть:

MONGODB_HOST = os.environ['DB_PORT_27017_TCP_ADDR']
MONGODB_PORT = 27017

app = Flask(__name__)
bootstrap = Bootstrap(app)
client = MongoClient(MONGODB_HOST, MONGODB_PORT)

docker-compose.yml

web:
  build: .
  command: python -u app.py
  ports:
    - "80:80"
  volumes:
    - .:/project
  environment:
    MONGODB_HOST: db
  links:
      - db

db:
  image: mongo:3.4
  command: mongod
  ports:
    - "27017:27017"

Dockerfile

FROM python:3.6.1-alpine

MAINTAINER mebarkiakhalil@gmail.com

WORKDIR /project

ADD . /project

RUN pip install -r requirements.txt

EXPOSE 80

EXPOSE 27017

CMD ["mongod"]

ENV NAME Cheppers_DevOps_Challenge

ENTRYPOINT python app.py

Проблема, с которой я сталкиваюсь, после помещения изображений в AWS ECS, а затем создания кластера с заданным помещенным репозиторием дляизображение контейнера, я всегда получаю эту ошибку в журналах определения задачи:

2019-10-08 14:19:02
MONGODB_HOST = os.environ['DB_PORT_27017_TCP_ADDR']
KeyError: 'DB_PORT_27017_TCP_ADDR'

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Я предлагаю вам сменить хост mongo:

MONGODB_HOST = "db"

этот os.environ['DB_PORT_27017_TCP_ADDR'] будет использовать IP-адрес контейнера, который вам не нужен, так как compose будет передавать его для вас, используя имена сервисов. .

Я думаю, AWS обрабатывает IP-адрес другим способом, который больше не является dict ("KeyError")

1 голос
/ 08 октября 2019

pymongo.errors.ServerSelectionTimeoutError: db: 27017: [Errno -2] Имя не разрешается -

Причина в том, что контейнер неправильно связывается, если вы действительно заинтересованы виспользуя связывание в ECS, вы должны определить оба контейнера в одном определении задачи означать два контейнера на одно определение задачи, вы не можете связать контейнер из двух разных определений задач.

Затем вы можете ссылаться на контейнер Монго по контейнеру, как указано в @ linpy.

Таким образом, ваше определение задачи для контейнеров будет выглядеть следующим образом

enter image description here

и обновите раздел связывания в определении задачи для контейнера Python или используйте JSON, как указано в комментарии.

enter image description here

значит, мне нужно создать еще один контейнер в кластере для MongoDB?

Если вы создаете

  • Новое определение задачи БД
  • Служба для БД

Тогда в приведенном вышепривязка к регистру не будет работать, тогда вам придется использовать сервисное обнаружение или внутренний LB.

...