Ich versuche gerade, Docker zu lernen, und bin verwirrt darüber, wo tatsächlich Datenmengen vorhanden sind.
Ich verwende Docker Desktop für Windows . (Windows 10)
In den Dokumenten heißt es, dass Sie durch Ausführen von Docker Inspect für das Objekt die Quelle erhalten: https://docs.docker.com/engine/tutorials/dockervolumes/#locating-a-volume
$ docker inspect web
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Allerdings sehe ich das nicht, ich bekomme folgendes:
$ docker inspect blog_postgres-data
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/blog_postgres-data/_data",
"Name": "blog_postgres-data",
"Options": {},
"Scope": "local"
}
]
Kann mir jemand helfen? Ich möchte nur wissen, wo mein Datenvolumen tatsächlich vorhanden ist. Befindet es sich auf meinem Host-Computer? Wenn ja, wie kann ich den Weg dorthin finden?
Antworten:
Ihr Volume-Verzeichnis ist
/var/lib/docker/volumes/blog_postgres-data/_data
und wird/var/lib/docker
normalerweise in gemountetC:\Users\Public\Documents\Hyper-V\Virtual hard disks
. Wie auch immer, Sie können es überprüfen, indem Sie in den Docker-Einstellungen nachsehen.In diesen Dokumenten finden Sie Informationen zum Freigeben von Laufwerken für Docker unter Windows.
Übrigens
Source
ist der Speicherort auf dem Host undDestination
der Speicherort innerhalb des Containers in der folgenden Ausgabe:================================================== =========================
Aktualisiert, um Fragen im Kommentar zu beantworten:
Eigentlich
volume
ist für diesen Zweck konzipiert (Daten im Docker-Container verwalten). Die Daten in einem Volume bleiben auf dem Host-FS erhalten und sind vom Lebenszyklus eines Docker-Containers / Images isoliert. Sie können Ihre Daten in einem Volume freigeben, indem Sie:Hängen Sie das Docker-Volume zum Hosten ein und verwenden Sie es erneut
docker run -v /path/on/host:/path/inside/container image
Dann bleiben alle Ihre Daten erhalten
/path/on/host
. Sie können es sichern, auf einen anderen Computer kopieren und Ihren Container mit demselben Volume erneut ausführen.Erstellen und Mounten eines Datencontainers.
Erstellen Sie einen Datencontainer:
docker create -v /dbdata --name dbstore training/postgres /bin/true
Führen Sie andere Container basierend auf diesem Container mit
--volumes-from
: ausdocker run -d --volumes-from dbstore --name db1 training/postgres
. Danndb1
bleiben alle von generierten Daten im Container-Volume erhaltendbstore
.Weitere Informationen finden Sie in den offiziellen Docker-Volumendokumenten .
Einfach ausgedrückt
volumes
ist es nur ein Verzeichnis auf Ihrem Host mit all Ihren Containerdaten, sodass Sie jede Methode verwenden können, die Sie zuvor zum Sichern / Freigeben Ihrer Daten verwendet haben.Nein. Ein Docker- Image können Sie an einen Docker-Hub (auch als "Registrierung" bezeichnet) senden. aber Daten sind nicht. Sie können Ihre Daten mit einer beliebigen Methode sichern / beibehalten / freigeben, aber es macht keinen Sinn, Daten in eine Docker-Registrierung zu übertragen, um sie freizugeben.
Ja, wie oben gepostet :-)
quelle
/var/lib/docker/volumes/blog_postgres-data/_data
ist der Linux VM Docker, auf dem ausgeführt wird. Meine größte Neugierde hier ist, dass das Teilen von Bildern usw. großartig ist, aber wie teile ich meine Daten? Kann ich ein Volume wie bei Bildern an Docker-Hub senden? Kann ich Backups usw. erstellen?docker run -it --rm -v blog_postgres-data:/data busybox ls -l /data
werden diese Daten angezeigt.Ich bin unter Windows + WSL 2 (Ubuntu 18.04). Ich habe meine Docker-Volumes an diesem Speicherort gefunden. Geben Sie den Windows-Datei-Explorer ein:
Sie haben ein Verzeichnis pro Volume.
quelle
Wenn Sie Linux-basierte Container auf einem Windows-Host ausführen, werden die tatsächlichen Volumes in der Linux-VM gespeichert und sind nicht auf den fs des Hosts verfügbar. Andernfalls werden Windows unter Windows ausgeführt => C: \ ProgramData \ Docker \ Volumes \
Außerdem
docker inspect <container_id>
wird die Containerkonfiguration aufgelistet. Weitere Informationen zur Persistenzschicht finden Sie im Abschnitt Mounts.Update: Gilt nicht für Docker, das unter WSL ausgeführt wird .
quelle
Wenn Sie wsl2 aktiviert haben, finden Sie es im Datei-Explorer unter
\\wsl$\docker-desktop\mnt\host\wsl\docker-desktop-data\data\docker
quelle
Das Mounten von NTFS-basierten Verzeichnissen funktionierte für meinen Zweck nicht (MongoDB - soweit mir bekannt ist, gilt dies zumindest auch für Redis und CouchDB): NTFS-Berechtigungen ermöglichten keinen erforderlichen Zugriff für solche DBs, die in Containern ausgeführt wurden. Das Folgende ist ein Setup mit benannten Volumes in HyperV.
Der folgende Ansatz startet einen SSH-Server innerhalb eines Dienstes, der mit Docker-Compse so eingerichtet wird, dass er automatisch gestartet wird und die Verschlüsselung mit öffentlichem Schlüssel zwischen Host und Container zur Autorisierung verwendet. Auf diese Weise können Daten über scp oder sftp hochgeladen / heruntergeladen werden.
Die vollständige Datei docker-compose.yml für eine Webanwendung + Mongodb sowie eine Dokumentation zur Verwendung des SSH-Dienstes finden Sie unten:
Dies hat nichts damit zu tun, aber für ein voll funktionsfähiges Beispiel muss vor jedem Docker-Compose-Aufruf das folgende Skript ausgeführt werden:
Update : Bitte beachten Sie, dass Sie heutzutage auch nur Docker- CP verwenden können, sodass der oben beschriebene SSHD-Container wahrscheinlich nicht mehr erforderlich ist, es sei denn, Sie benötigen Remotezugriff auf das Dateisystem, das in einem Container unter einem Windows-Host ausgeführt wird.
quelle
Jeder Container verfügt über ein eigenes Dateisystem, das vom Host-Dateisystem unabhängig ist. Wenn Sie Ihren Container mit dem Flag -v ausführen, können Sie Volumes so bereitstellen, dass Host und Container dieselben Daten sehen (wie im Docker-Lauf -v hostFolder: containerFolder).
Die erste Ausgabe, die Sie gedruckt haben, beschreibt ein solches gemountetes Volume (daher Mounts), bei dem "/var/lib/docker/volumes/fac362...80535/_data" (Host) in "/ webapp" (Container) gemountet ist.
Ich gehe davon aus, dass Sie -v nicht verwendet haben, daher ist der Ordner nicht gemountet und nur im Container-Dateisystem zugänglich, das Sie unter "/ var / lib / docker / volume / blog_postgres-data / _data" finden. Diese Daten werden gelöscht, wenn Sie den Container (Docker -rm) entfernen. Daher ist es möglicherweise eine gute Idee, den Ordner bereitzustellen.
Zu der Frage, wo Sie über Windows auf diese Daten zugreifen können. Soweit ich weiß, verwendet Docker für Windows das Bash-Subsystem in Windows 10. Ich würde versuchen, Bash für Windows 10 auszuführen und in diesen Ordner zu wechseln oder herauszufinden, wie Sie von Windows 10 aus auf die Linux-Ordner zugreifen können. Auf dieser Seite finden Sie häufig gestellte Fragen das Linux-Subsystem in Windows 10.
Update: Sie können Docker cp auch verwenden, um Dateien zwischen Host und Container zu kopieren.
quelle
Ich habe festgestellt, dass mein Docker-Setup mit WSL 2 (Ubuntu 20.04) diesen Speicherort verwendet:
Wo
UserName
ist dein Benutzername?quelle
Wenn Sie unter Windows arbeiten und Docker für Windows verwenden, funktioniert Docker über VM (MobyLinuxVM). Ihre Volumes (wie auch immer) befinden sich in dieser VM! So finden Sie sie:
quelle