Docker: utwórz trwały wolumin w określonym katalogu

16

Muszę utworzyć trwały wolumin dla Dockera. Wolumin musi zostać nazwany extra-addonsi zlokalizowany w /mnt/.

Uruchomię to polecenie:

sudo docker volume create /mnt/extra-addons

Otrzymałem ten komunikat o błędzie:

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

Zauważ, że kiedy po prostu uruchamiam: sudo docker volume create extra-addonsnie mam do czynienia z tym problemem, ale kiedy sprawdzam dany wolumin za pomocą sudo docker inspect extra-addons, widzę, że znajduje się w miejscu, którego nie chcę:

[
    {
        "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"
    }
]

Mam na myśli raczej wolę zobaczyć taki wolumin: /mnt/extra-addons

Dowolny pomysł?

Billal Begueradj
źródło

Odpowiedzi:

13

Znalazłem rozwiązanie:

Musiałem zainstalować wtyczkę local-persist .

Musiałem zamontować wolumin, aby utworzyć w punkcie montowania w następujący sposób:

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

Sprawdź, czy dostałem to, czego się spodziewałem:

sudo docker volume inspect extra-addons

Wynik:

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

Tego właśnie szukałem.

Billal Begueradj
źródło
6

Jeśli nie chcesz instalować żadnych wtyczek w swoim oknie dokowanym, zalecamy utworzenie symbolicznego łącza do woluminu:

$ 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

Teraz możesz swobodnie korzystać z wolumenu w zwykły sposób (wszystkie dane są przesyłane /mntzgodnie z oczekiwaniami)

Tom Mekken
źródło
Nie myśl, że dobrym pomysłem jest usuwanie woluminów zarządzanych przez dokera. Zamiast tego użyj montowania, aby zamontować katalog hosta w oknie dokowanym.
Lex
4

Nie wydaje mi się, aby korzystać ze local-persiststerownika. Od jakiegoś czasu nie był aktualizowany. Możesz zamontować katalog lokalny (host) w kontenerze dokera za pomocą montowania dokera.

Uruchomienie poniższego powoduje utworzenie nowego kontenera z zamontowanym katalogiem zamapowanym na mój pulpit.

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

Teraz możesz zobaczyć mntfolder w katalogu głównym kontenera.

bin dev etc home mnt proc root sys tmp usr var

Tworzenie nowego pliku w kontenerze

touch /mnt/extra-addons/test.txt

Tworzy plik test.txt na moim komputerze hosta. Pod określoną ścieżką. Jest to teraz dwukierunkowy folder współdzielony do odczytu / zapisu. Wiele kontenerów może zamontować ten sam folder. I będzie się utrzymywał po zamknięciu kontenera / ów.

wprowadź opis zdjęcia tutaj

Lex
źródło
Dzięki, uratowało mi to krok. Próbowałem dodać wolumin. wystarczy zamontować reż
Chaim Eliyah