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?

Emilien Brigand
la source

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 .
pl_rock
la source
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.

Javier Perez
la source
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

Fakabbir Amin
la source
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.

v1adko
la source