Docker: belirli bir dizinde kalıcı birim oluşturma


16

Docker için kalıcı bir birim oluşturmam gerekiyor . Birim adlandırılmalı extra-addonsve içinde bulunmalıdır /mnt/.

Bu komutu çalıştırın:

sudo docker volume create /mnt/extra-addons

Bu hata mesajını aldım:

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

Sadece çalıştırdığımda: sudo docker volume create extra-addonsbu sorunla karşılaşmadığımı, ancak söz konusu hacmi incelediğimde, sudo docker inspect extra-addonsistemediğim bir yerde bulunduğunu görüyorum:

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

Demek istediğim, hacmi şu şekilde görmek istiyorum: /mnt/extra-addons

Herhangi bir fikir?

Yanıtlar:


14

Çözümü buldum:

Local-persist eklentisini kurmak zorunda kaldım .

Bağlama noktasına oluşturmak için birimi bağlamak zorunda kaldım:

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

Beklediğimden emin olup olmadığımı kontrol et:

sudo docker volume inspect extra-addons

Sonuç:

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

Aradığım şey buydu.


6

Bağlantı biriminize herhangi bir eklenti yüklemek istemiyorsanız, biriminiz için sembolik bir bağlantı oluşturmanızı öneririm:

$ 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

Şimdi ses düzeyinizi her zamanki gibi kullanmaktan çekinmeyin (tüm verileriniz /mntistediğiniz gibi çalışır)


Liman işçileri tarafından yönetilen birimleri silmenin iyi bir fikir olduğunu düşünmeyin. Bir ana bilgisayar dizinini docker'a bağlamak için bunun yerine bir mount kullanın.
Lex

4

local-persistSürücüyü kullanmanın bir yol olduğunu sanmıyorum . Bir süredir güncellenmedi. Docker mount kullanarak bir docker konteynerine yerel (host) bir dizin monte edebilirsiniz.

Aşağıdakileri çalıştırmak, masaüstümle eşlenmiş bağlı bir dizine sahip yeni bir kap oluşturur.

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

Artık mntkapsayıcınızın kökünde bir klasör görebilirsiniz .

bin dev etc home mnt proc root sys tmp usr var

Kapsayıcıda yeni bir dosya oluşturma

touch /mnt/extra-addons/test.txt

Ana makinemde bir test.txt dosyası oluşturur. Belirtilen yolda. Bu artık iki yönlü okuma / yazma paylaşılan klasörüdür. Birden çok kap aynı klasörü bağlayabilir. Ve konteynırlarınızı kapattığınızda da devam edecektir.

resim açıklamasını buraya girin


Teşekkürler, bu beni bir adım kurtardı. Bir birim eklemeye çalışıyordum. dir dağı
Chaim Eliyah

bu bir bağlama yuvası oluşturur, docker birimlerin kullanılmasını önerir ve çeşitli avantajlara sahiptir docs.docker.com/storage/volumes
Joe Cabezas

@JoeCabezas evet hacimler yanaştırıcı tarafından yönetilen ve diğer işletim sistemi görevlerinden izole edildiği için üretim için daha iyi bir seçimdir. Ancak bu soru için belirli bir dizinde bağlama bağları cevap vardır. İkisini ayıran cevabı arttırır.
Lex

içgörü için teşekkürler, haklısın, soruyu cevaplamak için bir cilt hacmi yeterli.
Joe Cabezas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.