exportation de docker ENV vs RUN

91

Disons que je veux combiner ces commandes

RUN command_1
ENV FOO bar
RUN command_2

dans

RUN command_1 && export FOO=bar && command_2

et se demandait si la définition de la variable avec RUN exportvs ENVétait équivalente.

En d'autres termes, y a-t-il une différence entre ces commandes dans un Dockerfile?

ENV FOO bar

contre

RUN export FOO=bar
Utilisateur314159
la source

Réponses:

148

Comme illustré par le numéro 684 , exportne persistera pas sur les images. (N'oubliez pas que chaque directive Dockerfile générera un conteneur intermédiaire, engagé dans une image intermédiaire: cette image ne conservera pas la valeur exportée)
ENV:

Les variables d'environnement définies à l'aide de ENVpersisteront lorsqu'un conteneur est exécuté à partir de l'image résultante.
Vous pouvez afficher les valeurs à l'aide de docker inspectet les modifier à l'aide de docker run --env <key>=<value>.

Le problème illustrait cela avec:

RUN export PATH=$PATH:/foo/bar # from directly in builder

Quand je fais docker run [img] bash -c 'echo $PATH'ça n'inclut jamais /foo/bar.

Essayez-le

Créez un nouveau fichier docker contenant:

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

Puis construisez-le. Le résultat de la dernière étape est:

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

Tu peux voir:

  • FOOpersiste à travers les conteneurs intermédiaires, grâce au ENVmot - clé;
  • BARne persiste pas à l'étape suivante, à cause de la exportcommande;
  • BAZ s'affiche correctement car la variable est utilisée sur le même conteneur.
VonC
la source
(Je suppose que oui, mais :) Cela signifie-t-il que, dockerpar exemple, runavec --env-fileou --envexportera ces variables (par ces arguments d'option)? Désolé de se heurter à une si vieille réponse, mais une recherche sur le Web vient de m'en parler. Belle réponse btw.
hakre
@hakre oui, ils sont ajoutés à l'environnement: voir stackoverflow.com/a/49872152/6309 et ci-dessous.
VonC
Merci pour la réponse rapide, mais cette réponse ne montre pas que les variables sont marquées pour l'exportation. Du moins pas pour moi. Quoi qu'il en soit, je devrais faire mes propres devoirs ici, par exemple superuser.com/q/450868/63279 ou pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre