Как поделиться глобальными переменными env в Docker? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть две среды development и production, я использую два файла с соответствующими переменными каждой среды: .env.development и .env.production. Я использую тоже docker-compose для загрузки этих переменных.

.env.development

COMPOSE_PROJECT_NAME=luna
RAILS_ENV=development

DATABASE_URL=postgresql://user:pass@lunapostgres:5432/luna?encoding=utf8&pool=5&timeout=5000
REDIS_CACHE_URL=redis://:pass@redis:6379/0/cache
ACTIVE_JOB_QUEUE_PREFIX=luna:jobs
ACTIVE_JOB_URL=redis://:pass@redis:6379/0

AUTH_BASE_URL=auth.com
SOLAR_BASE_URL=http://test.url
# SOLAR_BASE_URL=http://api/api/v1/
BUNDLE_PATH=/box

BIND_ON=0.0.0.0:3000
SENTRY_DSN=http://xxxxxxx

PAGER=more

ACCESS_TOKEN=xxx
VERIFY_TOKEN=xxx
DIALOGFLOW_CLIENT_ACCESS_TOKEN=xxx
DIALOGFLOW_DEV_ACCESS_TOKEN=xxx

RAILS_MAX_THREADS=1
WEB_CONCURRENCY=1
REQUEST_TIMEOUT=5

DOMAIN=localhost:3000
BASE_URL=localhost:300
SECRET_TOKEN=xxx
LOG_LEVEL=debug
SOLAR_MENTOS_DEBUG=true

.env.production

COMPOSE_PROJECT_NAME=luna
RAILS_ENV=production
RACK_ENV=production

DATABASE_URL=postgresql://user:pass@lunapostgres:5432/luna?encoding=utf8&pool=5&timeout=5000
REDIS_CACHE_URL=redis://:pass@redis:6379/0/cache
ACTIVE_JOB_QUEUE_PREFIX=luna:jobs
ACTIVE_JOB_URL=redis://:pass@redis:6379/0

AUTH_BASE_URL=auth.com
SOLAR_BASE_URL=http://test.url
# SOLAR_BASE_URL=http://api/api/v1/
BUNDLE_PATH=/box

BIND_ON=0.0.0.0:3000
SENTRY_DSN=http://xxxxxxx



ACCESS_TOKEN=yyy
APP_SECRET=yyy
VERIFY_TOKEN=yyy
DIALOGFLOW_CLIENT_ACCESS_TOKEN=yyy
DIALOGFLOW_DEV_ACCESS_TOKEN=yyy

RAILS_SERVE_STATIC_FILES=true
RAILS_LOG_TO_STDOUT=true
WEB_CONCURRENCY=5
REQUEST_TIMEOUT=5
RAILS_MAX_THREADS=5



DOMAIN=production.com
BASE_URL=https://production.com

SECRET_TOKEN=yyy
LOG_LEVEL=info

# ----------------------------------------
DEVISE_SECRET_KEY='yyy'
GOOGLE_ANALYTICS_UA='yyy'

докер-compose.override.yml

version: '2'

services:
  app:
    env_file:
      - '.env.development'

докер-compose.production.yml

version: '2'

services:
  app:
    env_file:
      - '.env.production'

Я хотел бы поделиться эквивалентными переменными среды между моими контейнерами и сохранить разные переменные в вашей соответствующей среде.

1 Ответ

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

Использовать расширяемые файлы среды.

version: '2'

services:
  app:
    env_file:
      - 'base.env'
      - 'production.env'

Из Документов

Когда вы устанавливаете одну и ту же переменную среды в нескольких файлах, приоритет, используемый Compose, чтобы выбрать, какое значение использовать:

  1. Создать файл,
  2. Файл среды
  3. Dockerfile
  4. Переменная не определена

В документах не ясно об использовании нескольких файлов, поэтому я запустил тест. Последние файлы окружения переопределяют ранее установленные переменные. Если вы хотите переопределить значения по умолчанию, сделайте это в последнем файле или в файле композиции.

base.env

TEST_VARIABLE=base

production.env

TEST_VARIABLE=production

докер-compose.yml

version: '2.1'

services:
  test:
    image: alpine
    env_file:
      - 'base.env'
      - 'production.env'

Запуск docker-compose run --rm test с последующим echo $TEST_VARIABLE дает нам production. Таким образом, второй файл переопределяет первый.

...