Docker: Erstellen Sie ein persistentes Volume in einem bestimmten Verzeichnis


13

Ich muss ein beständiges Volume für Docker erstellen . Das Volume muss benannt sein extra-addonsund sich in befinden /mnt/.

Ich führe diesen Befehl aus:

sudo docker volume create /mnt/extra-addons

Ich habe folgende Fehlermeldung erhalten:

Error response from daemon: create /mnt/extra-addons: "/mnt/extra-addons" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path

Beachten Sie, dass ich beim Ausführen von: sudo docker volume create extra-addonsnicht auf dieses Problem stoße. Wenn ich jedoch das betreffende Volume mithilfe von überprüfe sudo docker inspect extra-addons, sehe ich, dass es sich an einem Ort befindet, den ich nicht möchte:

[
    {
        "CreatedAt": "2018-04-21T14:40:25+03:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/extra-addons/_data",
        "Name": "extra-addons",
        "Options": {},
        "Scope": "local"
    }
]

Ich meine, ich möchte den Band lieber so sehen: /mnt/extra-addons

Irgendeine Idee?

Antworten:


11

Ich habe die Lösung gefunden:

Ich musste das Local-Persist- Plugin installieren .

Ich musste das Volume wie folgt bereitstellen, um es am Bereitstellungspunkt zu erstellen:

 sudo docker volume create -d local-persist -o mountpoint=/mnt/ --name=extra-addons

Überprüfen Sie, ob ich das bekommen habe, was ich erwartet habe:

sudo docker volume inspect extra-addons

Ergebnis:

[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local-persist",
        "Labels": {},
        "Mountpoint": "/mnt/",
        "Name": "extra-addons",
        "Options": {
            "mountpoint": "/mnt/"
        },
        "Scope": "local"
    }
]

Das war es, wonach ich suche.


6

Wenn Sie keine Plugins in Ihrem Docker installieren möchten, würde ich empfehlen, einen symbolischen Link für Ihr Volume zu erstellen:

$ docker volume create <myVolume>
$ docker volume inspect <myVolume> 
[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/<myVolume>/_data",
        "Name": "<myVolume>",
        "Options": {},
        "Scope": "local"
    }
]
$ mkdir /mnt/<myVolume>
# if you already have data in your volume, you should copy it to `/mnt/<myVolume>` now
$ sudo rm -rf /var/lib/docker/volumes/<myVolume>/_data
$ sudo ln -s /mnt/<myVolume> /var/lib/docker/volumes/<myVolume>/_data

Jetzt können Sie Ihr Volume wie gewohnt verwenden (mit all Ihren Daten, /mntwie Sie wollten).


Halten Sie es nicht für eine gute Idee, von Docker verwaltete Volumes zu löschen. Verwenden Sie stattdessen einen Mount, um ein Host-Verzeichnis in docker einzuhängen.
Lex

3

Ich denke nicht, dass die Verwendung des local-persistTreibers der richtige Weg ist. Es wurde eine Weile nicht mehr aktualisiert. Sie können ein lokales (Host-) Verzeichnis mithilfe der Docker-Einbindung in einen Docker-Container einbinden.

Wenn Sie Folgendes ausführen, wird ein neuer Container mit einem bereitgestellten Verzeichnis erstellt, das meinem Desktop zugeordnet ist.

mkdir extra-addons
docker run -it -v /Users/me/Desktop/extra-addons:/mnt/extra-addons busybox /bin/sh
ls

Sie können jetzt einen mntOrdner im Stammverzeichnis Ihres Containers sehen.

bin dev etc home mnt proc root sys tmp usr var

Neue Datei im Container erstellen

touch /mnt/extra-addons/test.txt

Erstellt eine test.txt-Datei auf meinem Hostcomputer. Am angegebenen Pfad. Dies ist jetzt ein bidirektionaler Lese- / Schreib-Ordner. Mehrere Container können denselben Ordner bereitstellen. Und es bleibt bestehen, wenn Sie Ihre Container schließen.

Bildbeschreibung hier eingeben


Danke, das hat mir einen Schritt gespart. Ich habe versucht, ein Volume hinzuzufügen. besteige einfach das dir
Chaim Eliyah
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.