263 votes

construction de docker avec --build-arg avec plusieurs arguments

Selon la documentation, il est possible de définir plusieurs arguments pour le drapeau --build-arg, mais je ne peux pas savoir comment. J'ai essayé le suivant:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 number_of_replicas=2 --no-cache .

=> Renvoie une erreur.

J'ai aussi essayé:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5,number_of_replicas=2 --no-cache .

=> Ceci définit une variable, number_of_shards, à la valeur "5,number_of_replicas=2"

Une idée de comment je peux définir plusieurs arguments?

516voto

pl_rock Points 4101

Utilisez --build-arg avec chaque argument.

Si vous passez deux arguments, ajoutez --build-arg à chaque argument, comme suit:

 docker build \
-t essearch/ess-elasticsearch:1.7.6 \
--build-arg number_of_shards=5 \
--build-arg number_of_replicas=2 \
--no-cache .
 

129voto

Javier Perez Points 580

La réponse ci-dessus de pl_rock est correcte, la seule chose que je voudrais ajouter est d'attendre l'ARG à l'intérieur du fichier Dockerfile, sinon vous n'y aurez pas accès. Donc si vous faites

 docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .
 

Ensuite, dans le fichier Docker, vous devez ajouter

 ARG number_of_replicas
ARG number_of_shards
 

Je rencontrais ce problème, alors j'espère pouvoir aider quelqu'un (moi-même) à l'avenir.

34voto

Fakabbir Amin Points 46

Si vous voulez utiliser la variable d'environnement pendant la construction. Permet de définir le nom d'utilisateur et le mot de passe.

 username= Ubuntu
password= swed24sw
 

Dockerfile

 FROM ubuntu:16.04
ARG SMB_PASS
ARG SMB_USER
# Creates a new User
RUN useradd -ms /bin/bash $SMB_USER
# Enters the password twice.
RUN echo "$SMB_PASS\n$SMB_PASS" | smbpasswd -a $SMB_USER
 

Commande de terminal

docker build --build-arg SMB_PASS=swed24sw --build-arg SMB_USER=Ubuntu . -t IMAGE_TAG

14voto

v1adko Points 92

Il est dommage que nous ayons également besoin de plusieurs ARG, car cela entraîne la création de plusieurs couches et ralentit la construction, et pour quiconque s’interroge également, il n’existe actuellement aucun moyen de définir plusieurs ARG.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X