2016-07-16 5 views
0

Ich habe ein Volume aus einer docker-compose.yml-Datei erstellt. Lassen Sie uns den Datenträger my_volume und den Container, der my_container zugeordnet ist, aufrufen. Ich möchte die Entfernung des Inhalts des Volumes skripten. Alle unten genannten Annahmen gehen davon aus, dass my_container gestoppt, aber nicht entfernt wurde.Wie entfernen Sie den Inhalt eines Andockvolumes?

kann ich den Inhalt des Volumens Liste:

docker run --rm -v my_volume:/data/ ubuntu ls -la /data 

Dies funktioniert, so dass beim nächsten Ich versuche, den Inhalt des Datenordner zu entfernen, mit:

docker run --rm -v my_volume:/data/ ubuntu rm -rf /data/* 

keine Fehlermeldung gemeldet wird So scheinen Dinge erfolgreich, aber wenn ich den Inhalt des Volumes erneut auflisten, wurden keine Daten auf dem Volume entfernt.

docker run --rm -it -v my_volume:/data/ ubuntu /bin/bash 

dann aus dem Behälter:

ich die Entfernung durch einen Behälter eintritt und dann tun die Entfernung wie so erreichen kann

rm -rf /data/* 

Dies funktioniert gut und der Inhalt entfernt, aber das macht den Zweck zunichte, da es nicht skriptfähig ist. Irgendwelche Ideen, warum rm nicht funktioniert, wenn ich versuche, es außerhalb des Containers zu verwenden und wie ich den Inhalt des Volumes erfolgreich entfernen könnte? Ich sollte beachten, dass ich das Volume nicht entfernen und ein neues erstellen möchte, da dies das Entfernen des ursprünglichen Containers/Images erfordert, das mit dem Volume verknüpft ist, das ich nicht tun möchte. Danke für jede Hilfe!

+0

Vielleicht nicht wirklich, wo Sie suchen, aber sie sind in der Lage, Ihr Volumen löschen mit 'rm -r/var/lib/Docker/volumes/my_volume/_data/*' – lvthillo

+0

Andere Dinge, die ich versucht, ' docker run --rm -v mein-volume:/data/ubuntu rm -rf data/'hat funktioniert, aber gab ein Gerät ist beschäftigt Warnung/Fehler. Eine andere "Lösung" bestand darin, alles separat zu entfernen (aber Sie können dies nur tun, wenn Sie immer wissen, was Ihr Volume enthält: 'docker run --rm -v mein-volume:/data/ubuntu rm -rf data/dir1 data/dir2 data/file1 .. " – lvthillo

Antwort

2

Irgendwelche Ideen, warum rm nicht, wenn ich es außerhalb des Behälters

Ich glaube, zu verwenden versuchen funktioniert, was passiert ist, dass /data/* in der Host-Shell ausgewertet wird. Der Container wird also mit dem Befehl rm -rf /data/somefile /data/otherfile ... mit der Liste der Dateien im Verzeichnis /data auf dem Host ausgeführt. Wenn diese Dateien nicht mit dem Container übereinstimmen, wird scheinbar nichts entfernt.

Sie können einfache Anführungszeichen verwenden, um zu verhindern, dass die Erweiterung in der Host-Shell erfolgt.

rm -rf '/data/*' 
+1

Docker scheint irgendwelche Zitate in den Container zu geben, sonst läuft es ohne eine Shell, um zu expandieren, so dass Sie ein'/data/* 'nicht gefunden bekommen. Sie können eine Shell aufrufen Die Erweiterung für dich: 'docker run --rm -v mein_volume:/data/ubuntu/bin/sh -c" rm -rf/data/* "' – BMitch

+0

Danke BMitch, das war der Trick für mich! – Brett