2016-07-24 9 views
-1

Ich starte einen Container mit einigen Parametern im interaktiven Modus.Docker: neue Parameter für angehängten Container

docker run -i -t --name mycontainer myimage prm1 prm2 

ENTERYPOINT ist meine Anwendung, die Parameter verwendet.

Nachdem die Sitzung beendet wurde, möchte ich eine neue mit neuen Parametern starten.

Wie kann ich neue Parameter in die neue Sitzung übertragen?

PS: Ist es ein passendes Szenario für interaktive Docker-Anwendung? Oder sollte ich für jede neue Sitzung einen neuen Container erstellen?

+0

Hinweis für Moderatoren: Docker Fragen sind 100% auf Thema auf Stack Overflow. Tausende von ähnlichen Fragen zu Container und Dockerfile finden Sie hier, auf Stack Overflow. – VonC

Antwort

1

Am besten ist es, wenn Sie Ihre ENTRYPOINT auf die Standardeinstellung (sh -c oder my_application) verlassen, und verwenden Sie CMD stattdessen für den Befehlsparameter

CMD prm1 prm2 

Das heißt, standardmäßig wird ein Docker Lauf PRM1 Prm2 verwenden, indem Sie Standard, aber Sie können sie leicht überschreiben, indem Sie beim nächsten Docker-Lauf neue Parameter übergeben.


Dieser Ansatz (oben) basiert auf dem Ausführen eines neuen Containers, anstatt einen "Exited" neu zu starten.

Das ist die übliche Praxis ist, als persistente Daten sollten in einem Volumen (docker volume create), die Sie (wieder) montieren auf den neuen Container (docker run -v)

Wenn Sie waren starten Sie Ihren Behälter und Nutzen gehalten werden von verschiedenen Parametern, dann hängt es von Ihrer Anwendung:

  • , wenn die App diese Parameter von Umgebungsvariablen lesen können, den neuen docker update Befehl (PR 15078, noch offen auf issue 22490) tut nicht noch Umgebungsvariablen aktualisieren (nur CPU und Speicher)
  • , wenn die App der aus einer Property-Datei lesen kann, Sie in docker cp kopieren zu diesem Container eine aktualisierte Version der Eigenschaftendatei, mit neuen Eigenschaften nutzen könnten es.
+0

Lassen Sie mich klären. Die Anwendung verwendet Parameter, aber standardmäßig sind keine Parameter vorhanden. So kann ich problemlos jeden Parameter übergeben, wenn ich einen Container erstelle. Aber es ist nicht klar, wie man neue Parameter übergeben, wenn ich den Container neu starte (starten + anhängen). –

+1

@DmitryPetrov Sie müssen nicht neu starten: Sie starten (führen Sie) einen neuen Container) – VonC

+0

@DmitryPetrov "Es gibt standardmäßig keine Parameter." : Das ist, weil Sie ENTRYPOINT verwenden. Wenn Sie CMD verwenden, gibt es standardmäßig einen Parameter. – VonC