2016-06-15 15 views
1

Ich bin wirklich fest mit der Verwendung von Docker VOLUME's. Ich habe eine Ebene dockerfile:Dockerfile VOLUME funktioniert nicht

FROM ubuntu:latest 
VOLUME /foo/bar 
RUN touch /foo/bar/tmp.txt 

Ich lief $ docker build -f dockerfile -t test . und es war erfolgreich. Danach führte ich interaktiv eine Shell in den Andock-Container ein, der dem Lauf des erstellten test-Images zugeordnet war. Das heißt, ich lief $ docker run -it test

Beobachtungen:

/foo/bar erstellt, aber leer.

docker inspect test Montageinfo:

"Volumes": { 
    "/foo/bar": {} 
} 

Es scheint, dass es nicht bei allen ist Montage. Die Aufgabe scheint ziemlich geradlinig zu sein, aber mache ich etwas falsch?

EDIT: Ich bin auf der Suche nach den Daten, die in diesem bereitgestellten Volume-Verzeichnis erstellt wird.

+2

[Dies ist ein etabliertes Verhalten.] (Https://github.com/docker/docker/issues/3639) – jwodder

+0

@jwodder, So, wie ich Daten, die ich erstelle, behalte? – darxtrix

+0

siehe https://docs.docker.com/engine/userguide/containers/dockervolumes/ – user2915097

Antwort

3

Die VOLUME-Anweisung muss nach dem RUN platziert werden.

Wie in https://docs.docker.com/engine/reference/builder/#volume erklärte:

Hinweis: Wenn alle Build-Schritte, um die Daten innerhalb des Volumens ändern, nachdem er erklärt wurde, werden diese Änderungen verworfen.

Wenn Sie die Quelle des Volumens durch die run Befehl Docker erstellt wissen wollen:

docker inspect --format='{{json .Mounts}}' yourcontainer 

wird eine Ausgabe wie diese geben:

[{ 
    "Name": "4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628", 
    "Source": "/var/lib/docker/volumes/4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628/_data", 
    "Destination": "/foo/bar", 
    "Driver": "local", 
    "Mode": "", 
    "RW": true, 
    "Propagation": "" 
}] 

Quelle enthält den Pfad, den Sie sind auf der Suche nach.

+0

+1, ich habe merkwürdiges Verhalten gesehen, wenn Volumes früh deklariert werden, manchmal enthalten sie ein einzelnes COPY/ADD, aber nicht das Ergebnis von RUN. Am besten, die Volume-Deklaration spät in den Build zu stellen. – BMitch

+0

Danke Mann, rettete meinen Tag! – darxtrix

+0

@michael_bitard, Wie bekomme ich den Mount-Speicherort auf meiner Host-Festplatte? – darxtrix

Verwandte Themen