Variáveis de ambiente são valores definidos fora da aplicação. São utilizados para dados sensíveis como: ApiKey, ConnectionString, senhas, etc. Elas existem para essas informações não ficarem exposta no código-fonte ou no appsettings.json.
Ordem de prioridade
O .NET lê as configurações nesta ordem de prioridade:
- Variáveis de ambiente (Docker, Kubernetes, etc.)
- Argumentos de linha de comando (
dotnet run --ConnectionStrings:TFConnection=...) - Arquivo
appsettings.{Environment}.json(ex:appsettings.Production.json) - Arquivo
appsettings.json - Valores padrão no código (
Hardcoded values)
Ou seja, se o Docker fornecer uma variável de ambiente, ela vai sobrescrever o que está no appsettings.json.
Passando variável de ambiente no Docker
Existe algumas formas de passar as variáveis de ambientes para o ambiente docker e isso varia de acordo com a sua abordagem utilizada no projeto
Docker run
Esse é o jeito mais direto. Você pode injetar variáveis com a flag -e:
docker run -e ApiKey=SUA_CHAVE_API minha-imagemAqui, ApiKey será injetada no ambiente do container e estará disponível para o .NET usar como configuração.
Docker Compose
Se estiver usando docker-compose, o arquivo pode conter a seção environment dentro do serviço:
services:
minha-api:
image: minha-imagem
environment:
- ApiKey=SUA_CHAVE_APIOu com o formato de chave/valor:
environment:
ApiKey: SUA_CHAVE_API
Usando .env (forma recomendada)
Você pode criar um arquivo .env com suas variáveis, e referenciar ele no docker-compose.yml.
.env:
ApiKey=SUA_CHAVE_APIdocker-compose.yml:
services:
minha-api:
image: minha-imagem
env_file:
- .envO Docker automaticamente carrega as variáveis do arquivo .env e injeta no ambiente do container.