2015-04-19 5 views
9

Ich versuche docker-compose up die Art zu verwenden, wie Sie docker run [APP_CONTAINER_NAME] [APP_OPTIONS] verwenden können.Wie kann ich Befehlszeilenoptionen an mein dockerisiertes Programm senden, das ich mit "docker-compose up" starte?

+0

angegeben verstehe ich nicht wirklich die Frage - In Docker-Compose bringen Sie Ihre Argumente in die docker-compose.yml-Datei. Gibt es ein Problem mit diesem Ansatz für Sie? –

+0

@AdrianMouat Ja, es ist nicht ideal, denn jedes Mal, wenn Sie eine neue Option senden möchten, müssen Sie das docker-compose.yml ändern, neu erstellen und erneut ausführen. Ich möchte in der Lage sein, Optionen zu meinem Programm zu senden, wenn ich den Dienst ausführe, wie ich tun kann, wenn ich den Hauptcontainer mit 'docker run' ausführe und ENTRYPOINT in meiner Dockerfile verwende, um dieses Verhalten zu erreichen. – Donovan

Antwort

2

docker run ist definiert als:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 

Während docker compose run wie folgt definiert ist:

docker-compose run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 

In beiden Fällen die endgültige ARGS (die "APP_OPTIONS" der Frage könnte die OP) wird an den Container-Befehl übergeben werden.

Beachten Sie, dass einige der docker run Option verwendet werden können, wie in docker-compose run (eine -d, um den Container-Befehl losgelöst auszuführen), aber nicht alle von ihnen.

+2

Gibt es keine Möglichkeit, die ARGS in die Docker-Compose-Datei zu setzen? Sie in der Befehlszeile zu übergeben, ist in meinem Fall zu volatil. – dsteinkopf

+1

@deinkaufopf Sure: Mit 'command' (https://docs.docker.com/compose/compose-file/#command) können Sie den image default Befehl überschreiben, so dass Sie den im Bild definierten Befehl wiederholen, aber ändern können seine Parameter. – VonC

3

Der Punkt von Docker Compose ist, dass Sie sich nicht an alle Befehlszeilenschalter erinnern müssen.

Wenn Sie die Umgebungsvariablen für verschiedene Kontexte ändern möchten, sollten Sie eine Basisdatei common.yml für Compose erstellen. Sie können dann für jeden anderen Kontext eine neue XML-Datei erstellen, die von der common.yml-Datei mit der extends-Anweisung abgeleitet wird. Sie können dann das Flag -f auf docker compose verwenden, um zwischen Kontexten zu wechseln.

Beachten Sie auch, dass Compose nichts "neu erstellen" sollte, wenn Sie nur eine Variable im XML ändern, und dass Sie eine externe Datei für Umgebungsvariablen verwenden können, wenn dies für Sie besser funktioniert.

1

Sie müssen sich die Dockerfile anschauen und sehen, was mit den APP_OPTIONS passiert. Es besteht die Möglichkeit, dass der ENTRYPOINT die Optionsflags übernimmt. In diesem Fall geben Sie den Befehl an den Einstiegspunkt senden

command: [-flag1, -flag2] 

Verwendung Das funktioniert, weil der Befehl in der Dockerfile fungiert als Standard-args auf den Einstiegspunkt, wenn beide https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/

Verwandte Themen