, ,

Docker : variables d'environnement

Par défaut le conteneur est isolé, il est créé avec un environnement minimal différent du contexte depuis lequel il est démarré.

docker container run --rm -it busybox:latest /bin/sh
env
 
HOSTNAME=22d263bfa153
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

On peut définir des valeurs à ajouter à son environnement directement sur la ligne de commande via l'argument -e ou --env:

docker container run --rm -it -e USER_VAR="ma_var" busybox:latest /bin/sh
env
 
HOSTNAME=7a72c7b2e1f0
SHLVL=1
HOME=/root
TERM=xterm
USER_VAR=ma_var
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

On peut transmettre une valeur préexistante dans l’environnent créant le conteneur:

# Ajout d'une variable dans l’environnement d'appel
export FROM_ENV="valeur_environnement_appel"
 
# Transmission de la variable préexistante FROM_ENV dans le contexte d'exécution du conteneur
docker container run --rm -it -e FROM_ENV busybox:latest /bin/sh
 
printenv FROM_ENV
valeur_environnement_appel
Si la variable n'existe pas, le conteneur est créé sans générer de message particulier. L'environnement du conteneur ne la contient pas.
# Supprime la variable FROM_ENV de l'environnement courant
unset FROM_ENV 
 
# Tentative de passage d'une variable d'environnement non définie
docker container run --rm -it -e FROM_ENV busybox:latest /bin/sh
 
env
HOSTNAME=43d6bb8be1ce
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

On constate bien que l'environnement du conteneur ne contient pas de variable FROM_ENV.

La syntaxe shell permet de définir une valeur par défaut dans le cas ou la variable n'existerait pas dans l'environnement d'appel.

docker container run --rm -it -e NOEXIST=${NOEXIST:-default_value} busybox:latest /bin/sh
 
printenv NOEXIST
default_value

Si on souhaite passer différentes variables d'environnement, on peut utiliser un fichier, par défaut on le nomme .env:

.env
COMPOSE_PROJECT_NAME=usertools
PORT=10001
USER_DEF_1=my_value_01
USER_DEF_2=my_value_02

Ici notre fichier contient 4 variables, il est fournit sur la ligne de commande via l'argument --env-file:

docker container run --rm -it --env-file .env busybox:latest /bin/sh
env
 
HOSTNAME=5b54b5786316
SHLVL=1
PORT=10001
HOME=/root
COMPOSE_PROJECT_NAME=usertools
TERM=xterm
USER_DEF_1=my_value_01
USER_DEF_2=my_value_02
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

Si la valeur préexiste dans l'environnement d'appel mais qu'elle est redéfinie dans le fichier .env ou sur la ligne de commande, c'est la variable redéfinie qui est transmise.

# variable définie dans l'environnement d'appel
export PORT=20001
 
docker container run --rm -it -e PORT=10001 busybox:latest /bin/sh
 
printenv PORT
10001

Références