docker build con --build-arg con più argomenti


193

Secondo la documentazione , è possibile definire più argomenti per la bandiera --build-arg, ma non riesco a scoprire come. Ho provato quanto segue:

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

=> Questo restituisce un errore.

Ho anche provato:

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

=> Questo imposta una variabile, number_of_shardssul valore "5, number_of_replicas = 2"

Qualche idea su come posso definire più argomenti?

Risposte:


358

Utilizzare --build-argcon ogni argomento.

Se stai passando due argomenti, aggiungi --build-argcon ogni argomento come:

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

63
Grazie per il chiarimento. Il --helpquesto è particolarmente fuorviante: --build-arg list. Non è un elenco!
Cowlinator

91

La risposta sopra di pl_rock è corretta, l'unica cosa che vorrei aggiungere è aspettarsi l'ARG all'interno del Dockerfile se non si avrà accesso ad esso. Quindi se lo stai facendo

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

Quindi all'interno del Dockerfile dovresti aggiungere

ARG number_of_replicas
ARG number_of_shards

Stavo incontrando questo problema, quindi spero di aiutare qualcuno (me stesso) in futuro.


6
mi hai aiutato anche tu, quindi grazie. Consentitemi di aggiungere solo ciò che ARGSdeve essere dichiarato dopoFROM
Edoardo,

6
Wow grazie! L'uso ARGnon è nemmeno menzionato in docs.docker.com/engine/reference/commandline/build/… ed è --build-argstato inutile per me senzaARG
HeyWatchQuesto

19

Se si desidera utilizzare la variabile di ambiente durante la compilazione. Diciamo che imposta username e password.

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

Comando terminale

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


3
Attenzione che questo lascia i valori segreti visibili nell'immagine docker usando il docker historycomando.
Gary,

a volte l'unica risposta migliore è votata! ma l'hai spiegato molto bene. Grazie!
Dupinder Singh,

14

È un peccato che anche noi abbiamo bisogno di più ARG, causa più livelli e rallenta la costruzione a causa di ciò, e per chiunque si chieda anche che, al momento non c'è modo di impostare più ARG.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.