2017-01-05 4 views
4

Ich schreibe eine Dockerfile, wo ich eine wechseln möchten Satz von Git Repos: Repo1, Repo2, Repo3. Wie soll ich diese URLs/Zeichenketten der Dockerdatei bei Image Build oder Container Laufzeiten liefern?Übergabe einer Liste von Argumenten an Docker zum Build/Laufzeit

Ich weiß, man kann ein Argument übergeben die ARG Anweisung verwendet und

docker build --build-arg <var-name>=<value>

mit Aber was passiert, wenn ich eine Liste von Argumenten beliebiger Länge haben?

Vielen Dank.

+0

Wie wissen Sie, Sie Repo1 oder repo2 oder repo3 passieren? – user2915097

Antwort

0

dockerfile bei Bild bauen laufen

Das ist wahrscheinlich nicht die beste Idee, aber Sie würden mit Env-Variablen enden und diese in der Dockerdatei verwenden.

Behälter Laufzeiten

Das ist, meiner Meinung nach, eine viel bessere Idee. Wenn Sie den Befehl erwartet Eingabe kennen, können Sie diese in der dockerfile hinzufügen:

ENTRYPOINT ["git","-c","/tmp"] 
CMD ["--help"] 

Wir haben git ein „hart codiert“ Parameter für, das heißt, jedes Mal wenn wir laufen diesen Docker Container der Parameter -c /tmp geben wird git. Ich benutze dies als ein Beispiel, falls Sie es brauchen, aber es ist nicht erforderlich und ENTRYPOINT ["git"] wird gut funktionieren.

In diesem Fall ist CMD der "Standard". In diesem Fall verwenden wir "--help", um dem Benutzer hilfreich mitzuteilen, dass er einen Parameter hinzufügen muss.

Sie könnten CMD zu einem Standard-Repo machen oder was immer Sie wollen.

IMHO, ENTRYPOINT und CMD sollten immer in Verbindung verwendet werden.

Falls Sie neugierig, warum verwenden ENTRYPOINT [] (dies ist die bevorzugte Form nach Docker), ist dies aus den Docker docs:

Hinweis: Anders als bei der Schalenform, die exec Form tut Befehl nicht aufrufen Shell. Dies bedeutet, dass normale Shell-Verarbeitung nicht stattfindet. Für Beispiel wird CMD ["echo", "$ HOME"] keine Variablensubstitution auf $ HOME ausführen. Wenn Sie eine Shell-Verarbeitung wünschen, verwenden Sie entweder das Shell-Formular oder führen Sie eine Shell direkt aus, zum Beispiel: CMD ["sh", "-c", "echo $ HOME" ]. Wenn Sie das exec-Formular verwenden und eine Shell direkt ausführen, wie im Fall für die Shell-Form, ist es die Shell, die die Umgebungsvariable variable Erweiterung ausführt, nicht docker.

Source

0

Bauzeit

Das Beste, was ich von ist denken kann, in einer durch Kommata getrennte Liste weitergeben müssen:

docker build --build-arg repos=repo1,repo2 

Docker wird dies für Sie in eine Liste nicht analysieren, sondern die Skripte laufen während Der Build könnte die Zeichenfolge in eine Liste aufteilen.

Laufzeit

Wenn Sie Ihren Befehl ENTRYPOINT dann alle nachgestellten Parameter docker run zum Eintrittspunkt Befehl erhalten beigefügten definieren.

Also, wenn Ihr Dockerfile enthält:

ENTRYPOINT echo hello 

Dann:

docker run myimage glorious world 

... den Befehl

echo hello glorious world 
Verwandte Themen