web-dev-qa-db-fra.com

Comment définir une variable dans un fichier Docker?

Dans mon Dockerfile, je voudrais définir des variables que je peux tiliser plus tard dans le Dockerfile.

Je connais l'instruction ENV, mais je ne veux pas que ces variables soient des variables d'environnement.

Existe-t-il un moyen de déclarer les variables à la portée de Dockerfile?

107
Maxime

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 constructeur à l'aide de la commande docker build lors de la création, à l'aide de l'indicateur --build-arg <varname>=<value>. Si un utilisateur spécifie un argument de construction non défini dans le fichier Dockerfile, la construction génère une erreur.

83
lumos0815

À ma connaissance, seul ENV permet cela, comme indiqué 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.

Ils doivent être des variables d'environnement pour pouvoir être à nouveau déclarés 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 Dockerfile, mais dans un conteneur créé pour une ligne Dockerfile, d'où l'utilisation d'une variable d'environnement.


Ce jour-là, 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, et non à l'exécution.

Mon Dockerfile a généralement:

ARG var
ENV var=${var}

Dans votre cas, ARG suffit: je l'utilise généralement pour définir la variable http_proxy, cette version du docker ayant besoin d'accéder à Internet au moment de la construction.

43
VonC

Pour répondre à ta question:

Dans mon fichier Dockerfile, j'aimerais définir des variables que je pourrai utiliser ultérieurement dans le fichier Dockerfile.

Vous pouvez définir une variable avec:

ARG myvalue=3

Les espaces autour du caractère égal ne sont pas autorisés.

Et utilisez-le plus tard avec:

RUN echo $myvalue > /test
20
Ortomala Lokni

Si la variable est réutilisée dans la même instruction RUN, vous pouvez simplement définir une variable Shell. J'aime vraiment la façon dont ils ont abordé cette question avec le fichier officiel de Docker Ruby .

11