🐳 Como usar .env
com Docker Compose corretamente¶
Este guia explica como usar arquivos .env
com o Docker Compose, especialmente quando o .env
está fora da raiz do projeto, como na pasta config/
.
✅ Objetivo¶
Permitir que o Docker Compose e seus containers usem variáveis de ambiente definidas em um arquivo .env
localizado em config/.env
.
🚫 O Problema com ${VARIAVEL}
e env_file:
¶
env_file:
- config/.env
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
Nesse exemplo, ${POSTGRES_USER}
não será resolvido a partir do config/.env
. O Docker Compose tenta buscar essas variáveis do ambiente do seu sistema operacional (host), e não do env_file:
.
✅ Soluções possíveis¶
✅ Opção 1: Usar somente env_file:
(mais simples e recomendado)¶
services:
db:
image: postgres:14
container_name: container_postgres_financeiro
env_file:
- config/.env
📌 Não use
${VAR}
dentro deenvironment:
nesse caso.
✅ Opção 2: Mover o .env
para a raiz do projeto¶
Estrutura:
.
├── .env
├── docker-compose.yml
services:
db:
image: postgres:14
container_name: container_postgres_financeiro
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
✅ O Docker Compose carrega automaticamente
.env
da raiz do projeto.
✅ Opção 3: Usar flag --env-file
no comando¶
Mantém o .env
na pasta config/
, e executa com:
docker-compose --env-file config/.env up --build
services:
db:
image: postgres:14
container_name: container_postgres_financeiro
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
✅ O Compose carrega as variáveis do
.env
como se estivessem no ambiente do host.
🧠 Comparativo final¶
Situação | ${VAR} funciona? |
env_file: necessário? |
Observações |
---|---|---|---|
.env na raiz do projeto |
✅ | ❌ | Auto-carregado pelo Compose |
env_file: com .env em subpasta |
❌ | ✅ | Só passa para o container |
Usando --env-file na linha de comando |
✅ | ❌ | Precisa especificar manualmente no comando |
✅ Recomendado para seu caso¶
Se você quer manter .env
dentro da pasta config/
, use:
- Apenas
env_file:
nodocker-compose.yml
- Ou
--env-file config/.env
no comando
Feito com 💙 por ChatGPT