{{tag>sysadmin variable environnement}} ====== 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'': 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 ===== * https://help.cloud66.com/maestro/how-to-guides/build-and-config/env-vars-in-dockerfile.html * https://www.rosehosting.com/blog/how-to-set-environment-variables-in-docker/ * https://stackoverflow.com/questions/19537645/get-environment-variable-value-in-dockerfile