docker construit avec --build-arg avec plusieurs arguments


193

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é ce qui suit:

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

=> Cela 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 la façon dont je peux définir plusieurs arguments?

Réponses:


359

Utilisez --build-argavec chaque argument.

Si vous passez deux arguments, ajoutez --build-argavec chaque argument comme:

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

63
Merci d'avoir clarifié cela. Le --helpsur cela est trompeur en particulier: --build-arg list. Ce n'est pas une liste!
cowlinator

91

La réponse ci-dessus de pl_rock est correcte, la seule chose que j'ajouterais est d'attendre l'ARG dans le Dockerfile sinon vous n'y aurez pas accès. Alors si tu fais

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 Dockerfile, vous devez ajouter

ARG number_of_replicas
ARG number_of_shards

J'étais confronté à ce problème, alors j'espère aider quelqu'un (moi-même) à l'avenir.


6
vous m'avez aidé aussi, alors merci. Permettez-moi d'ajouter seulement ce qui ARGSdoit être déclaré aprèsFROM
Edoardo

6
Ouah merci! L'utilisation ARGn'est même pas mentionnée dans docs.docker.com/engine/reference/commandline/build / ... et --build-argétait inutile pour moi sansARG
HeyWatchThis

19

Si vous souhaitez utiliser la variable d'environnement lors de la construction. Disons la configuration du nom d'utilisateur et du 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


3
Attention, cela laisse les valeurs secrètes visibles dans l'image docker à l'aide de la docker historycommande.
Gary le

parfois, la seule réponse la plus élevée est un vote positif! mais vous l'avez très bien expliqué. Je vous remercie!
Dupinder Singh

14

C'est dommage que nous ayons également besoin de plusieurs ARG, cela entraîne plusieurs couches et ralentit la construction à cause de cela, et pour quiconque se demande également cela, il n'y a actuellement aucun moyen de définir plusieurs ARG.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.