Comment définir une variable dans un Dockerfile?

Dans mon fichier Docker , j’aimerais définir des variables que je pourrai utiliser plus tard dans le Dockerfile .

Je suis au courant de l’instruction ENV , mais je ne veux pas que ces variables soient des variables d’environnement.

Existe-t-il un moyen de déclarer des variables dans la scope de Dockerfile ?

Vous pouvez utiliser ARG – voir https://docs.docker.com/engine/reference/builder/#arg

L’instruction ARG définit une variable que les utilisateurs peuvent transmettre au générateur au moment de la construction avec la commande docker build à l’aide de l’ --build-arg = . Si un utilisateur spécifie un argument de génération qui n’a pas été défini dans le fichier Dockerfile, la génération génère une erreur.

A ma connaissance, seule ENV permet, comme mentionné dans ” Environnement de remplacement ”

Les variables d’environnement (déclarées avec l’instruction ENV ) peuvent également être utilisées dans certaines instructions en tant que variables à interpréter par le fichier Dockerfile.

Il doit s’agir de variables d’environnement pour être redéclarées dans chaque nouveau conteneur créé pour chaque ligne du fichier Dockerfile par docker build .

En d’autres termes, ces variables ne sont pas interprétées directement dans un fichier Docker, mais dans un conteneur créé pour une ligne Dockerfile, d’où l’utilisation de la variable d’environnement.


Ce jour, j’utilise à la fois ARG ( docker 1.10+ et docker build --build-arg var=value ) et ENV .
Utiliser ARG seul signifie que votre variable est visible au moment de la construction, pas à l’exécution.

Mon fichier Dockerfile a généralement:

 ARG var ENV var=${var} 

Dans votre cas, ARG est suffisant: je l’utilise généralement pour définir la variable http_proxy, qui nécessite un access à Internet au moment de la construction.

Si la variable est réutilisée dans la même instruction RUN , il suffit de définir une variable shell. J’aime beaucoup leur approche avec le Ruby Dockerfile officiel .

Pour répondre à ta question:

Dans mon fichier Docker, j’aimerais définir des variables que je pourrai utiliser plus tard dans le Dockerfile.

Vous pouvez définir une variable avec:

 ARG myvalue=3 

Les espaces autour du même caractère ne sont pas autorisés.

et l’utiliser plus tard avec

 RUN echo $myvalue > /test