Skip to content

How to pass env variables to a container

An environment variable consists of a variable name and its value.

There are two ways to set environment variables for a docker container: with CLI arguments, using an env file.

CLI arguments

When we launch our Docker container, we can pass environment variables as key-value pairs directly into the command line using the parameter –env (or its short form -e).

For instance, let's execute the following command:

docker run --rm --env VARIABLE1=foobar alpine env

Tip

Docker Alpine is the “Dockerized” version of Alpine Linux, a Linux distribution known for being exceptionally lightweight and secure. For these reasons and others, Docker Alpine is a popular choice for developers looking for a base image on which to create their own containerized apps.

The environment variables we set will be printed to the console:

...
VARIABLE1=foobar

As can be seen, the Docker container correctly interprets the variable VARIABLE1.

Also, we can omit the value in the command line if the variable already exists in the local environment.

For example, let's define a local environment variable:

export VARIABLE2=foobar2

Then, let's specify the environment variable without its value:

docker run --rm --env VARIABLE2 alpine env

And we can see Docker still picked up the value, this time from the surrounding environment:

...
VARIABLE2=foobar2

Using --env-file

The above solution is adequate when the number of variables is low. However, as soon as we have more than a handful of variables, it can quickly become cumbersome and error-prone.

An alternative solution is to use a text file to store our variables, using the standard key=value format.

Let's define a few variables in a file we'll call my-env.txt:

echo VARIABLE1=foobar1 > my-env.txt
echo VARIABLE2=foobar2 >> my-env.txt
echo VARIABLE3=foobar3 >> my-env.txt

Now, let's inject this file into our Docker container:

docker run --env-file my-env.txt alpine env

Finally, let's take a look at the output:

...
VARIABLE1=foobar1
VARIABLE2=foobar2
VARIABLE3=foobar3