PassFront
  1. PassFront
  2. База знаний
  3. Docker Compose

Как передавать переменные окружения и секреты в Docker Compose?

Docker Compose

Конфигурацию задают через environment и env_file, а чувствительные значения лучше передавать через secrets или внешнее хранилище, а не хранить в репозитории.

Способы

services:
  api:
    image: myapp
    environment:
      NODE_ENV: production
      DB_HOST: db
      API_KEY: ${API_KEY}       # подстановка из окружения хоста или .env рядом с compose
    env_file:
      - .env                    # файл не коммитится

Docker secrets

services:
  api:
    secrets: [db_password]
secrets:
  db_password:
    file: ./secrets/db_password.txt   # монтируется в /run/secrets/db_password

Приложение читает файл, поэтому значение не попадает в переменные окружения и вывод docker inspect.

Правила

  • Файлы .env с реальными значениями добавляют в .gitignore, а в репозитории хранят .env.example.
  • Не записывать секреты в Dockerfile через ENV и ARG: они остаются в слоях образа.
  • Для production использовать менеджер секретов оркестратора или облака.

Коротко для собеседования

Обычные настройки через environment и env_file, секреты через файлы или внешнее хранилище. В образ и в Git они не попадают.

Другие вопросы раздела