Docker Build mit --build-arg mit mehreren Argumenten

192

Laut dem Dokumentation ist es möglich, mehrere Argumente für das Flag zu definieren --build-arg, aber ich kann nicht herausfinden, wie. Ich habe folgendes versucht:

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

=> Dies gibt einen Fehler zurück.

Ich habe auch versucht:

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

=> Dies setzt eine Variable number_of_shardsauf den Wert "5, number_of_replicas = 2".

Irgendeine Idee, wie ich mehrere Argumente definieren kann?

Emilien Brigand
quelle

Antworten:

355

Verwenden --build-arg mit jedem Argument.

Wenn Sie zwei Argumente übergeben, fügen Sie --build-argmit jedem Argument Folgendes hinzu:

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
quelle
62
Danke, dass du das geklärt hast. Das --helpist besonders irreführend : --build-arg list. Es ist keine Liste!
Cowlinator
91

Die obige Antwort von pl_rock ist richtig. Das einzige, was ich hinzufügen möchte, ist, das ARG in der Docker-Datei zu erwarten, wenn Sie keinen Zugriff darauf haben. Also, wenn du es tust

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

Dann sollten Sie in der Docker-Datei hinzufügen

ARG number_of_replicas
ARG number_of_shards

Ich bin auf dieses Problem gestoßen und hoffe, dass ich in Zukunft jemandem (mir) helfen kann.

Javier Perez
quelle
6
Du hast mir auch geholfen, also danke. Lassen Sie mich nur hinzufügen, dass ARGSnachFROM
Edoardo
6
Wow, danke! Die Verwendung ARGwird in docs.docker.com/engine/reference/commandline/build/… nicht einmal erwähnt und --build-argwar für mich ohneARG
HeyWatchThis
19

Wenn Sie während des Builds Umgebungsvariablen verwenden möchten. Nehmen wir an, Sie setzen Benutzername und Passwort.

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

Terminalbefehl

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

Fakabbir Amin
quelle
3
Beachten Sie, dass dadurch die geheimen Werte mit dem docker historyBefehl im Docker-Image sichtbar bleiben .
Gary
manchmal ist die einzige Top-Antwort positiv bewertet! aber du hast das sehr gut erklärt. Danke dir!
Dupinder Singh
13

Es ist eine Schande, dass wir auch mehrere ARGs benötigen. Dies führt zu mehreren Ebenen und verlangsamt den Build, und für alle, die sich auch fragen, gibt es derzeit keine Möglichkeit , mehrere ARGs festzulegen.

v1adko
quelle