2014-12-11 9 views
7

Ich möchte die Daten im freigegebenen Datenträger eines Containers an ein Bild übergeben. Ich kann es nicht tun? Ich habe den Eindruck, dass dies bei Docker vielleicht nicht möglich ist, aber das scheint völlig im Widerspruch zu der ganzen Philosophie zu stehen, keine Daten über den Host zu hinterlassen, daher denkt ein Teil von mir, dass es einen Weg geben muss, dies zu tun.Wie kann ich in Docker Dateien zwischen Containern freigeben und sie dann in einem Image speichern?

1. Terminal 1

einen Container im Terminal 1 mit einem Volumen in Betrieb.

$ docker run -it -v /data ubuntu:14.10 /bin/bash 
[email protected]:/# echo "Hello Docker Volumes." > /data/foo.txt 

2. Terminal 2

einen zweiten Behälter in Terminal 2 die Datei aus dem Behälter 1 dort Inbetriebnahme ist so Docker Band alle arbeiten.

$ docker run -it --volumes-from 19fead4f6a68 ubuntu:14.10 /bin/bash 

[email protected]:/# cat /data/foo.txt 
Hello Docker Volumes. 

3. Terminal 3

Mein Verständnis ist, dass ich nur Diffs Bilder begehen kann, damit ich überprüfen, was die diffs auf beiden Behälter sind. Aus irgendeinem seltsamen Grund erscheinen meine Änderungen nicht!

$ docker diff 19fead4f6a68 
A /data 

$ docker diff 5c7cdbfc67d8 
A /data 

4. Zurück in Terminal 1

ich eine Datei außerhalb des Volume-Ordner

[email protected]:/# echo "Docker you are a very strange beast...." > /var/beast.txt 

5. Zurück in Terminal 3

Wir haben jetzt einige Änderungen schaffen wir können Commit, obwohl ich ziemlich frustriert bin, da dies nicht die Daten sind, die ich mit meinem anderen Container teilen musste.

$ docker diff 19fead4f6a68 
A /data 
C /var 
A /var/beast.txt 

Dies ist eindeutig durch das Design. Hat jemand irgendwelche Ideen, warum Docker mir nicht erlauben, Volumendaten zu einem Festschreiben zu speichern? Gibt es überhaupt irgendwelche Dateien zwischen Containern zu teilen und sie dann in einem Bild zu speichern? Ich habe das Gefühl, dass etwas fehlt, das mir fehlt. Besonders zu den Enden des Teilens von Daten unter Vermeidung von Host-Abhängigkeiten.

Antwort

5

Volumes befinden sich außerhalb von Containerbildern. Genau dafür sind sie da - indem sie Daten in einen Container bringen, der nicht im Bild enthalten ist.

Vom Docker docs:

Ein Datenvolumen ist ein speziell festgelegtes Verzeichnis in einem oder mehreren Behältern, die die Union File System umgeht mehrere nützliche Funktionen für persistente oder gemeinsam genutzte Daten zu liefern:

  • Datenvolumen können zwischen Containern gemeinsam genutzt und wiederverwendet werden
  • Änderungen an einem Datenvolumen werden direkt vorgenommen
  • Änderungen an einem Datenvol ume werden nicht berücksichtigt, wenn Sie

einen Bild aktualisieren Wenn Sie einige Änderungen als Teil eines Bildes speichern möchten, stellen Sie die Änderungen im Bild und nicht in einem Volumen.Wenn Sie Änderungen für mehrere Container freigeben möchten, legen Sie diese Daten in einem Volume ab. Sie müssen jedoch eigene Vorkehrungen für Snapshots, Rollback usw. treffen, da Docker diese Funktion nicht besitzt.

Vielleicht würden Sie Interesse an Flocker haben.

+0

So wie eine dritte Person? Ich erkannte, dass sie nicht als Teil des Containers behandelt wurden. Meine Frage ist jedoch, ob es möglich ist, außerhalb des Mounten eines Host-Volumes dieses dritte Objekt zu speichern. – rickard

+0

erweiterte meine Antwort zu versuchen, dies zu adressieren – Bryan

Verwandte Themen