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?

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 .

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.


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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.