Docker: cree un volumen persistente en un directorio específico

13

Necesito crear un volumen persistente para Docker. El volumen debe ser nombrado extra-addonsy ubicado en /mnt/.

Ejecuto este comando:

sudo docker volume create /mnt/extra-addons

Recibí este mensaje de error:

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

Tenga en cuenta que cuando simplemente ejecuto:, sudo docker volume create extra-addonsno enfrento este problema, pero cuando inspecciono el volumen en cuestión usando sudo docker inspect extra-addons, veo que está ubicado en un lugar que no deseo:

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

Quiero decir que prefiero ver el volumen así: /mnt/extra-addons

¿Alguna idea?

Billal Begueradj
fuente

Respuestas:

11

Encontré la solución:

Tuve que instalar el complemento local-persistir .

Tuve que montar el volumen para crear en el punto de montaje de la siguiente manera:

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

Comprueba si obtuve lo que esperaba:

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

Eso era lo que estaba buscando.

Billal Begueradj
fuente
6

Si no desea instalar ningún complemento en su ventana acoplable, le recomendaría crear un enlace simbólico para su volumen:

$ 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

Ahora, siéntase libre de usar su volumen de la forma habitual (con todos sus datos en la /mntforma deseada)

Tom Mekken
fuente
No creo que sea una buena idea eliminar los volúmenes administrados de Docker. Utilice un montaje en su lugar para montar un directorio de host en el acoplador
Lex
3

No creo que usar el local-persistcontrolador sea el camino a seguir. No ha sido actualizado en mucho tiempo. Puede montar un directorio local (host) en un contenedor acoplable utilizando el montaje acoplable.

Ejecutar lo siguiente crea un nuevo contenedor con un directorio montado asignado a mi escritorio.

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

Ahora puede ver una mntcarpeta en la raíz de su contenedor.

bin dev etc home mnt proc root sys tmp usr var

Crear un nuevo archivo en el contenedor

touch /mnt/extra-addons/test.txt

Crea un archivo test.txt en mi máquina host. En la ruta especificada. Esta es ahora una carpeta compartida de lectura / escritura bidireccional. Múltiples contenedores pueden montar la misma carpeta. Y persistirá una vez que cierre sus contenedores.

ingrese la descripción de la imagen aquí

Lex
fuente
Gracias, esto me salvó un paso. Estaba tratando de agregar un volumen. simplemente monte el dir
Chaim Eliyah