переменная окружения docker-compose set не работает - PullRequest
0 голосов
/ 11 декабря 2018

Я использую docker, а также использую docker-compose для привязки каждого контейнера.

В моем коде фляги Python ссылаюсь на переменную окружения следующим образом.

import os

from app import db, create_app


app = create_app(os.getenv('FLASK_CONFIGURATION') or 'development')

if __name__ == '__main__':
    print(os.getenv('FLASK_CONFIGURATION'))
    app.run(host='0.0.0.0', debug=True)

И docker-compose.yml здесь.

version: '3.7'

services:
  nginx:
    build: 
      context: .
      dockerfile: docker/nginx/dockerfile
    container_name: nginx
    hostname: nginx-prod
    ports:
      - '80:80'
    networks: 
      - backend
    links:
      - web_project
    depends_on:
      - web_project
    environment:
      - FLASK_CONFIGURATION=production

  mongodb:
    build:
      context: .
      dockerfile: docker/mongodb/dockerfile
    container_name: mongodb
    hostname: mongodb-prod
    ports:
      - '27017:27017'
    networks:
      - backend

  web_project:
    build:
      context: .
      dockerfile: docker/web-prod/dockerfile
    container_name: web_project
    hostname: web_project_prod
    ports:
      - '5000:5000'
    networks:
      - backend
    tty: true
    depends_on:
      - mongodb
    links:
      - mongodb
    environment:
      - FLASK_CONFIGURATION=production

networks: 
  backend:
    driver: 'bridge'

Я устанавливаю FLASK_CONFIGURATION=production с помощью команды окружения.

Но когда я выполняюсь, возможно, FLASK_CONFIGURATION=production не работает.

Я такжепытался ENV FLASK_CONFIGURATION production к каждому докер-файлу.(тоже не работает)

Странно то, что когда я захожу в свой контейнер через bash (docker exec -it bash) и проверяю переменную среды с помощью export, она была установлена ​​отлично.

Есть ли неправильный код в моих настройках докера?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

[решено]

Вызывается супервизором.

При использовании супервизора его оболочка изолируется от оригинала.

Таким образом, мы должны определить переменные среды вsupervisor.conf

0 голосов
/ 11 декабря 2018

Ваш код фляги выглядит нормально, и, как вы сказали ... в bash эта переменная ENV существует,

Мой совет вам - найти способ поместить эту переменную в файл .env в вашем проекте.

Я объясню, почему я говорю об аналогичной проблеме, которая была у меня с cron:

Cron работает в своем «собственном мире», потому что система запускает и выполняет его, и из-заесли он не разделяет те переменные ENV, которые держит bash процесса основного контейнера.

Так что я предполагаю (просьба дать обратную связь, если нет), что колба тоже работает аналогичным образом в его "собственном мире" иу меня нет доступа к тем ENV, которые установлен Docker.

Итак, я создал bash-скрипт, который читает все переменные ENV и записывает их в файл .env проекта, этот скрипт запускается после контейнерасоздал.

Таким образом, независимо от того, где и как вы запускаете код / ​​скрипт ... эти переменные ENV всегда будут существовать.

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