Dans mon Dockerfile , je voudrais définir des variables que je pourrai utiliser plus tard dans le Dockerfile .
Je connais l' ENV
instruction, 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 portée Dockerfile ?
variables
docker
dockerfile
Maxime
la source
la source
Réponses:
Vous pouvez utiliser
ARG
- voir https://docs.docker.com/engine/reference/builder/#argla source
À ma connaissance,
ENV
autorise uniquement cela, comme mentionné dans " Remplacement de l'environnement "Ils doivent être des variables d'environnement afin d'être redéclarés dans chaque nouveau conteneur créé pour chaque ligne du Dockerfile par
docker build
.En d'autres termes, ces variables ne sont pas interprétées directement dans un Dockerfile, mais dans un conteneur créé pour une ligne Dockerfile, d'où l'utilisation de la variable d'environnement.
Aujourd'hui, j'utilise à la fois
ARG
( docker 1.10+, etdocker build --build-arg var=value
) etENV
.Utiliser
ARG
seul signifie que votre variable est visible au moment de la construction, pas au moment de l'exécution.Mon Dockerfile a généralement:
Dans votre cas, cela
ARG
suffit: je l'utilise généralement pour définir la variable http_proxy, dont la construction de docker a besoin pour accéder à Internet au moment de la construction.la source
Pour répondre à ta question:
Vous pouvez définir une variable avec:
Les espaces autour du caractère égal ne sont pas autorisés.
Et utilisez-le plus tard avec:
la source
Si la variable est réutilisée dans la même
RUN
instruction, on pourrait simplement définir une variable shell. J'aime vraiment la façon dont ils ont abordé cela avec le Ruby Dockerfile officiel .la source
RUN foo=$(date) && echo $foo
Vous pouvez utiliser
ARG variable defaultValue
et pendant la commande d'exécution, vous pouvez même mettre à jour cette valeur en utilisant--build-arg variable=value
. Pour utiliser ces variables dans le fichier docker, vous pouvez les référencer comme$variable
dans la commande d'exécution.Remarque: ces variables seraient disponibles pour les commandes Linux comme
RUN echo $variable
et elles ne persisteraient pas dans l'image.la source