it-swarm.com.de

docker-compose: Option zum automatischen Entfernen von Containern nach dem Ausführen in docker-compose.yml

Die docker-compose run Referenz gibt an, dass sie die Option --rm Hat

Behälter nach dem Lauf entfernen.

Ich möchte dies zu einem Standardverhalten von run für einige der Dienste machen, die ich in docker-compose.yml Angegeben habe.

Die Fragen sind also :

  1. Kann es irgendwie in docker-compose.yml Angegeben werden?
  2. Wenn ja, wie kann ich das machen?

( INB4 "Bash-Aliase verwenden, Luke!" : Natürlich kann ich dies außerhalb von docker-compose.yml Durchsetzen, indem ich einige Bash-Alias ​​wie alias docker-compose-run='docker-compose run --rm', Aber ich bin daran interessiert, wie ich das genau durch docker-compose.yml Durchsetzen kann, nicht auf irgendeine Weise.)

26
Ivan Kolmychek

TLDR: Es ist noch nicht möglich 2018-11 ; benutze docker-compose down oder docker-compose run --rm

Ich möchte eine aktualisierte Antwort auf diese Frage geben, da es fast 3 Jahre später ist. Dies erspart anderen die Suche.

Ich hatte die gleiche Frage und hier sind die Problemumgehungen, die ich gefunden habe (einschließlich der aus der Frage selbst):

docker-compose down

was macht das folgende:

Stoppt Container und entfernt Container, Netzwerke, Volumes und Images, die von up erstellt wurden.

Standardmäßig werden nur folgende Elemente entfernt:

- Containers for services defined in the Compose file
- Networks defined in the networks section of the Compose file
- The default network, if one is used

Als extern definierte Netzwerke und Volumes werden niemals entfernt.

Obwohl Sie es nicht in docker-compose.yml Deklarieren können, wird es Ihnen Ärger ersparen. vor allem mit Volumes und Netzwerken.

docker-compose run --rm

--rm - Behälter nach dem Lauf entfernen. Im getrennten Modus ignoriert.

Führt einen einmaligen Befehl für einen Dienst aus. Der folgende Befehl startet beispielsweise den Webdienst und führt bash als Befehl aus.

docker-compose run web bash

[...] Der von run übergebene Befehl überschreibt den in der Dienstkonfiguration definierten Befehl.

[...] Der Befehl erstellt keinen der in der Dienstkonfiguration angegebenen Ports . Dies verhindert Portkollisionen mit bereits geöffneten Ports. Wenn Sie möchten, dass die Ports des Dienstes erstellt und dem Host zugeordnet werden, geben Sie die - Service-Ports an Flagge

docker-compose rm -f

-f, --force Bitten Sie nicht um Bestätigung der Entfernung

12
Moe Pad

Es ist nicht Teil des Dockerfile oder docker-compose.yml spec, es ist nur eine cli-Option für den Befehl run, daher lautet die Antwort nein. Sie müssen sich für die Durchsetzung auf etwas Externes verlassen.

Wenn Sie ein Build-Tool für Ihr Projekt haben, ist es normalerweise am besten, Docker-Compose-Aufgaben damit zu versehen. Zum Beispiel bieten unsere Gradle-Projekte Docker-bezogene Aufgaben, die einige Standardoptionen wie --rm zum Ausführen von Aufgaben.

8
Erik Dannenberg