Как передавать переменные окружения и секреты в 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 они не попадают.