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

24

In der docker-compose runReferenz wird angegeben , dass die --rmOption dazu besteht

Behälter nach dem Lauf entfernen.

Ich möchte dies zu einem Standardverhalten runfür einige von mir angegebene Dienste machen docker-compose.yml.

Die Fragen sind also :

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

( INB4 "Benutze Bash-Aliase, Luke!" : Natürlich kann ich dies außerhalb erzwingen, docker-compose.ymlindem alias docker-compose-run='docker-compose run --rm'ich einen Bash-Alias ​​wie setze, aber ich bin interessiert daran, wie ich das genau durchsetzen kann, docker-compose.ymlund nicht auf irgendeine externe Weise.)

Ivan Kolmychek
quelle

Antworten:

10

TLDR: Es ist immer noch nicht möglich, 2018-11 ; benutze docker-compose downoderdocker-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 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

Netzwerke und Volumes, die als extern definiert sind, werden niemals entfernt.

Obwohl Sie es nicht deklarieren können, erspart es docker-compose.ymlIhnen Ärger. vor allem bei 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 durch run übergebene Befehl überschreibt den in der Dienstkonfiguration definierten Befehl .

[...] Der Befehl erstellt keine der in der Dienstkonfiguration angegebenen Ports . Dies verhindert Portkollisionen mit bereits offenen Ports. Wenn Sie die Service-Ports tun wollen geschaffen werden an den Host und kartiert, geben Sie die --service-Ports Flagge

docker-compose rm -f

-f, --force Bitten Sie nicht, das Entfernen zu bestätigen

Moe Pad
quelle
8

Es ist nicht Teil von Dockerfileoder docker-compose.ymlspec, sondern nur eine cli-Option für den Befehl run. Die Antwort lautet also 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 verbinden. Zum Beispiel bieten unsere Gradle-Projekte Docker-bezogene Aufgaben, die einige Standardoptionen festlegen, wie --rmzum Beispiel für ausgeführte Aufgaben.

Erik Dannenberg
quelle