Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

Linux / DevOps

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` импортирует все переменные внутрь контейнера списком.

Полезные материалы
Рекомендуем