How to use Env variables in Docker & docker-compose
Dockerfile
1. ENV
Use ENV command to set env variable in Dockerfile.
ENV username=barryallen
echo $username // barryallen
# Build this image and run it as a container
docker build -t docker-env .
docker run docker-env
# logs "barryallen"
Environment variables defined with ENV command are persisted in multiple containers running the same image. These can be overridden using run command with -e flag.
# Use -e or --env to override env variables in Dockerfile via build command
docker run -e/--env "username=clark kent" docker-env
# Use --env-file to use .env file to override env variables in Dockerfile
docker run --env-file .env docker-env
Use this to override a variables in a specific container. Other containers running without -e flag still uses env variable defined in Dockerfile
2. ARG
Use ARG command to use dynamic values that are only necessary while building the image and not needed while running it as container
ARG location="Gotham City"
echo $location // Gotham City
# build the image & run in container
docker build -t docker-env .
docker run docker-env
# location will not be available as ENV variable in containers
This ARG variable can be dynamically passed in build command as 👇
docker build -t app-latest --build-arg "location=Watch Tower"
3. Use ARG as ENV
We can persist ARG variables by mapping them to ENV variables in Dockerfile.
ARG version
ENV VERSION=${version}
echo $VERSION
docker build -t docker-env . --build-arg "version=1.0.1"
docker run docker-env
# 1.0.1
docker-compose
1. environment
docker-env:
build:
context: ./
environment:
- VERSION=1.0.0
You can set environment variables in a service’s containers with the environment attribute in your Compose file.
This works the same way as docker run -e VARIABLE=VALUE docker-image
2. env_file
docker-env:
build:
context: ./
env_file: .env
Instead of hardcoding env variables in your compose file, you can add those keys in a .env file and provide it to env_file attribute.
This works the same way as docker run --env-file=FILE docker-image
When both env_file and environment are set for a service, values set by environment have precedence.
Thanks for reading!
cheers :)
Checkout my other blogs
Top comments (0)