Docker: crie um volume persistente em um diretório específico

13

Preciso criar um volume persistente para o Docker. O volume deve ser nomeado extra-addonse localizado em /mnt/.

Eu executo este comando:

sudo docker volume create /mnt/extra-addons

Recebi esta mensagem de erro:

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

Observe que, quando simplesmente executo sudo docker volume create extra-addons:, não enfrento esse problema, mas quando inspeciono o volume em questão usando sudo docker inspect extra-addons, vejo que ele está localizado em um local que não desejo:

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

Quero dizer, eu quero ver o volume assim: /mnt/extra-addons

Qualquer ideia?

Billal Begueradj
fonte

Respostas:

11

Eu encontrei a solução:

Eu tive que instalar o plug - in local-persist .

Eu tive que montar o volume para criar no ponto de montagem da seguinte maneira:

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

Verifique se consegui o que esperava:

sudo docker volume inspect extra-addons

Resultado:

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

Era isso que eu estava procurando.

Billal Begueradj
fonte
6

Se você não deseja instalar nenhum plug-in na janela de encaixe, recomendamos a criação de um link simbólico para o seu volume:

$ 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

Agora, sinta-se à vontade para usar seu volume normalmente (com todos os seus dados inseridos /mntconforme desejado)

Tom Mekken
fonte
Não pense que é uma boa idéia excluir volumes gerenciados do docker. Use uma montagem para montar um diretório host na janela de encaixe.
22419 Lex
3

Eu não acho que usar o local-persistdriver seja o caminho a seguir. Não foi atualizado há algum tempo. Você pode montar um diretório local (host) em um contêiner de docker usando o docker mount.

A execução do seguinte cria um novo contêiner com um diretório montado mapeado para minha área de trabalho.

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

Agora você pode ver uma mntpasta na raiz do seu contêiner.

bin dev etc home mnt proc root sys tmp usr var

Criando um novo arquivo no contêiner

touch /mnt/extra-addons/test.txt

Cria um arquivo test.txt na minha máquina host. No caminho especificado. Agora, essa é uma pasta compartilhada de leitura / gravação em dois sentidos. Vários contêineres podem montar a mesma pasta. E persistirá assim que você desligar o seu contêiner.

insira a descrição da imagem aqui

Lex
fonte
Obrigado, isso me salvou um passo. Eu estava tentando adicionar um volume. simplesmente montar o dir
Chaim Eliyah