2014-07-15 15 views
34

Warum sind -d und --rm widersprüchliche Argumente in Docker?Wie kann ich Container losgelöst ausführen lassen und sie beim Verlassen automatisch entfernen lassen?

$ docker run -d --rm image 
Conflicting options: --rm and -d 

Ich habe eine Reihe von Containern, die Einheit/Funktions-/Integrationstests ausführen. Die Docker-Container starten, führen die Tests aus und stoppen dann. Ich lasse sie losgelöst laufen, weil mir nur die Ergebnisse wichtig sind, aber ich möchte auch, dass die Container nach dem Verlassen des Containers entfernt werden. Was wäre ein guter Weg, dies zu tun?

Antwort

28

Derzeit (Docker v1.1.1) wird diese Funktionalität nicht unterstützt. Der Entwickler des --rm Feature erklärt die Gründe dafür in seiner PR #1589:

Es ist derzeit nur unterstützt wird, wenn -d nicht vorgesehen ist. Es macht keinen Sinn, einen über den Docker-run -d erstellten Container automatisch zu entfernen. Es gibt zwei Gründe, warum dies auf diese Weise implementiert wird: 1) Wir möchten vielleicht eine Art von Exit-Status oder Protokollen abrufen, bevor wir den Container entfernen. 2) Dieser Run auf der Serverseite ist in der aktuellen Architektur schwierig.

Die gute Nachricht ist, dass jemand bereits eine issue to fix this geöffnet hat, damit Sie die Diskussion dort verfolgen können.

Auch ist eine Abhilfe nicht zu kompliziert, können Sie Ihre Behälter mit einem Wrapper-Skript wie folgt ausgeführt werden:

1.13.0
ID=$(docker run -d ubuntu sleep 3) 
docker wait $ID 
docker rm $ID 
12

Diese Optionen nicht mehr Konflikt als von Docker Version

Es war eine Pull-Anfrage, die die --rm Option Daemon-Seite verschiebt und das Ausführen von Containern ermöglicht, die mit der Entfernungsoption entfernt wurden: https://github.com/docker/docker/pull/20848

Verwandte Themen