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
# 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
:
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