How to pass environment variables to a Docker container?

Better Stack Team
Updated on November 16, 2022

It is always a good practice to separate the app from its configuration. It is not a good idea to have a database login credential defined as variables in the code of the application. This is why we use environment variables. But this means we need a way to pass the value somehow to the application running in the Docker container.

There are two main ways to inject environment variables into Docker containers.

Using the command line argument -env or -e

When you launch docker using the docker run command, you can pass the environment variables as a key-value pair using the -env (or -e) option.

docker run --name ubuntu -env VARIABLE='value' -d ubuntu
Copied!

If you have a variable already exported like this:

export VARIABLE='value'
Copied!

You can pass the variable into the docker like this:

docker run --name ubuntu -env VARIABLE -d ubuntu
Copied!

Using the .env file

Passing the variable using the command option argument is easy for a small number of variables. If you need to pass many variables at the same time, it is always better to use .env file.

The .env file (also called envfile) is a simple text file in which the variables are defined as key-value pairs.

You can append variables to envfile using the following syntax:

echo VARIABLE1='value1' > envfile.txt
echo VARIABLE2='value2' >> envfile.txt
echo VARIABLE3='value3' >> envfile.txt
Copied!

Please, notice the >> operator when appending to an existing file. Using the > operator would overwrite the content.

Got an article suggestion? Let us know
Explore more
Licensed under CC-BY-NC-SA

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

We are hiring.

Software is our way of making the world a tiny bit better. We build tools for the makers of tomorrow.

Explore all positions →

Reliability is the
ultimate feature

Delightful observability tools that turn your logs & monitoring into a secret weapon for shipping better software faster.

Explore Better Stack