Environment Variables
11. Environment Variables
Section titled “11. Environment Variables”🔐 What are Environment Variables?
Section titled “🔐 What are Environment Variables?”Environment variables are key-value pairs passed into a container at runtime. They let you configure your app without hardcoding values.
Why use them?
- Different values for dev/staging/production
- Keep secrets out of your code
- 12-Factor App methodology
🛠️ Setting Environment Variables
Section titled “🛠️ Setting Environment Variables”# Single variabledocker run -e NODE_ENV=production my-app
# Multiple variablesdocker run \ -e NODE_ENV=production \ -e DB_HOST=localhost \ -e DB_PORT=5432 \ -e DB_NAME=myapp \ my-app
# From an env filedocker run --env-file .env my-app
# Example .env file:# NODE_ENV=production# DB_HOST=db.example.com# DB_PASSWORD=s3cr3t# API_KEY=abc123xyz🔑 Common Environment Variables by Service
Section titled “🔑 Common Environment Variables by Service”# MySQLdocker run -e MYSQL_ROOT_PASSWORD=rootpass \ -e MYSQL_DATABASE=mydb \ -e MYSQL_USER=myuser \ -e MYSQL_PASSWORD=mypass \ mysql:8
# PostgreSQLdocker run -e POSTGRES_PASSWORD=secret \ -e POSTGRES_DB=myapp \ -e POSTGRES_USER=admin \ postgres:15
# MongoDBdocker run -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=password \ mongo:6
# Redis (with password)docker run -e REDIS_PASSWORD=mypassword redis
# Node.js appdocker run -e NODE_ENV=production \ -e PORT=3000 \ -e DATABASE_URL=postgresql://admin:pass@db:5432/myapp \ my-node-app⚠️ Security Warning
Section titled “⚠️ Security Warning”🚨 Never hardcode secrets in Dockerfiles or commit
.envfiles to Git!
# Bad: hardcoded in command (visible in shell history)docker run -e DB_PASSWORD=mysecret myapp
# Better: use an env file (add to .gitignore)docker run --env-file .env myapp
# Best: Use Docker Secrets (Swarm) or K8s SecretsAdd to .gitignore:
.env.env.local.env.production