Docker: membuat volume persisten di direktori tertentu

13

Saya perlu membuat volume persisten untuk Docker. Volume harus diberi nama extra-addonsdan terletak di /mnt/.

Saya menjalankan perintah ini:

sudo docker volume create /mnt/extra-addons

Saya mendapat pesan kesalahan ini:

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

Perhatikan bahwa ketika saya hanya menjalankan:, sudo docker volume create extra-addonssaya tidak menghadapi masalah ini tetapi ketika saya memeriksa volume yang dimaksud menggunakan sudo docker inspect extra-addons, saya melihat itu terletak di tempat yang tidak saya inginkan:

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

Maksudku, aku lebih suka melihat volume seperti ini: /mnt/extra-addons

Ada ide?

Billal Begueradj
sumber

Jawaban:

11

Saya menemukan solusinya:

Saya harus menginstal plugin local-persist .

Saya harus memasang volume untuk membuat ke titik pemasangan sebagai berikut:

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

Periksa apakah saya mendapatkan yang saya harapkan:

sudo docker volume inspect extra-addons

Hasil:

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

Itu yang saya cari.

Billal Begueradj
sumber
6

Jika Anda tidak ingin memasang plugin apa pun ke buruh pelabuhan, saya sarankan untuk membuat tautan simbolis untuk volume Anda:

$ 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

Sekarang merasa bebas untuk menggunakan volume Anda seperti biasa (dengan semua data /mntAnda seperti yang Anda inginkan)

Tom Mekken
sumber
Jangan berpikir itu adalah ide yang bagus untuk menghapus volume yang dikelola buruh pelabuhan. Gunakan mount sebagai gantinya untuk me-mount direktori host ke buruh pelabuhan.
Lex
3

Saya tidak berpikir menggunakan local-persistdriver adalah cara untuk pergi. Belum diperbarui untuk sementara waktu. Anda dapat memasang direktori lokal (host) ke dalam wadah buruh pelabuhan menggunakan buruh pelabuhan.

Menjalankan yang berikut ini membuat wadah baru dengan direktori yang terpasang dipetakan ke desktop saya.

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

Anda sekarang dapat melihat mntfolder di root wadah Anda.

bin dev etc home mnt proc root sys tmp usr var

Membuat file baru di wadah

touch /mnt/extra-addons/test.txt

Membuat file test.txt di mesin host saya. Di jalur yang ditentukan. Sekarang ini adalah folder berbagi-pakai baca / tulis dua arah. Beberapa kontainer dapat memasang folder yang sama. Dan itu akan bertahan setelah Anda menutup wadah Anda.

masukkan deskripsi gambar di sini

Lex
sumber
Terima kasih, ini menyelamatkan saya selangkah. Saya mencoba menambahkan volume. cukup pasang dir
Chaim Eliyah