2016-05-17 9 views
3

Ich habe ein Docker Image, das ein VOLUME ["/ log"] hat.Docker Unterschied zwischen Dockerfile VOLUME und Andock-run -v Befehl

Beim Ausführen des Containers mounte ich einen Ordner auf dem Host.

Ich möchte, dass alle Protokolle, die von docker geschrieben werden, bei VOLUME ["/ log"] für den Host verfügbar sind.

docker run --name=test -v ${pwd}/hostlogfolder:/log dockerimage:1 

Die Protokolle werden nicht

von hostlogfolder geschrieben zu werden

Aber die Protokolle sind verfügbar innerhalb Docker am Standort/log

docker exec -it test bash 
cd /log 

Was ist der richtige Weg, um den Ordner zu montieren?

Antwort

1

Wenn Sie ein Bild mit vordefinierten Einstellungen wie Datenträger hinzufügen erstellen möchten, müssen Sie Dockerfile verwenden. Oder wenn Sie kein Image erstellen müssen, aber nur einen temporären Container benötigen, um es beim Erstellen eines Containers zu übergeben.

Ich denke, dass Sie die Dokumentation zum Erstellen von Volumes und anderen Anweisungen lesen müssen. Es könnte sehr nützlich für dich sein.

docker run -d -P --name web -v /webapp training/webapp python app.py 

https://docs.docker.com/engine/userguide/containers/dockervolumes/

+0

Ich möchte auf die Dateien zugreifen, die von Docker unter location/log geschrieben wurden. Dies ist ein Speicherort, den ich in der Dockerfile mit VOLUME ["/ log"] erwähnt habe. Wenn ich docker inspect ausführen, sehe ich zwei Mounts, die auf den Dateispeicherort des Andocksystems zeigen, und ein Mount, das auf den von mir bereitgestellten Hostpfad zeigt. – unnik

+0

Gibt es eine Möglichkeit, den Bereitstellungspunkt auf dem Host mit der Anweisung VOLUME in Dockerfile anzugeben? –

+0

^nvm Ich habe tatsächlich einige 'Docker inspizieren einige Container | grep -e Quelle -e Ziel, die eine "VOLUME ["/einige/dir "] Direktive in ihrer" Dockerfile "hatte. Ich sah in 'Destination ->/einige/dir 'und ein automatisch erstelltes Verzeichnis auf meinem Host über'/var/lib/docker/volumes/some-container-id/_data'. Das erklärt es bisher. –

2

Sie sind fast da, muss der Befehl eine kleine Korrektur:

docker run --name=test -v $(pwd)/hostlogfolder:/log dockerimage:1 

Beachten Sie, dass die Klammern sind unterschiedlich:
falsch: ${pwd}
rechts: $(pwd)

Einmal ausgeführt, Sie können die aktivierten Volumes unter Verwendung überprüfen:

docker inspect <container id> - der Container-ID docker ps

Überprüfen Sie den Mounts Abschnitt des Befehlsausgabe mit bekommen kann.

"Mounts": [ 
      { 
       "Source": "<host path>", 
       "Destination": "<container path>", 
       "Mode": "", 
       "RW": true 
      }]