Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Docker Compose: передача переменных окружения из .env файла

Обновлено: 27.08.2026  ·  Официальная база знаний

Почему нельзя хранить пароли прямо в docker-compose.yml?

Когда вы указываете пароли от MySQL или секретные ключи API прямо в файле docker-compose.yml, возникает серьезный риск утечки: при отправке проекта в репозиторий GitHub или GitLab ваши секреты становятся доступны посторонним. Правильный и безопасный подход — выносить все конфиденциальные параметры в отдельный скрытый файл .env.

Пошаговая настройка файла .env в Docker Compose

  1. Создайте файл .env в папке проекта:
    Файл должен находиться в том же каталоге, что и ваш docker-compose.yml.
    nano .env
  2. Заполните переменные в формате КЛЮЧ=ЗНАЧЕНИЕ:
    MYSQL_ROOT_PASSWORD=SuperSecretPass123
    MYSQL_DATABASE=my_shop
    MYSQL_USER=shop_user
    MYSQL_PASSWORD=ShopUserPass456
    PORT=8080
  3. Подключите переменные в docker-compose.yml:
    version: '3.8'
    services:
      db:
        image: mysql:8.0
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        ports:
          - "${PORT}:3306"
  4. Запустите контейнеры:
    docker compose up -d
    Docker Compose автоматически найдет файл .env и подставит значения в конструкцию ${...}.

Важно для безопасности: Обязательно добавьте строку .env в файл .gitignore, чтобы пароли случайно не попали в публичный репозиторий Git!

Практический опыт инженера: Создавайте в корне проекта файл-образец `.env.example` с пустыми значениями для команды, а реальный `.env` на сервере заполняйте индивидуально с правами `chmod 600 .env`.

Частые вопросы (FAQ)

Нужно ли указывать кавычки для значений в файле .env?

Кавычки не обязательны, если в значении нет пробелов. Если пароль содержит пробелы или спецсимволы, возьмите его в двойные кавычки: `DB_PASS="p@ss word"`.

Как проверить, какие значения фактически подставились?

Выполните команду `docker compose config`. Она покажет итоговый сгенерированный YAML-файл со всеми подставленными паролями.

Что делать, если файл с переменными называется не .env, а prod.env?

Запускайте сборку с указанием флага: `docker compose --env-file prod.env up -d`.

В чем разница между environment и env_file в docker-compose?

`environment` передает переменные прямо в ОС контейнера, а блок `${VAR}` берет значения для сборщика Compose на хосте. Директива `env_file: .env` импортирует все переменные внутрь контейнера списком.