Montar un contenedor iso9660 en ubuntu:16.04

Montar un contenedor iso9660 en ubuntu:16.04

Intento montar un iso9660en un contenedor acoplable de Ubuntu pero aparece un archivo Unknown error -1.

docker run -i -t --rm ubuntu:16.04
apt-get update
apt-get install wget
wget http://dl-cdn.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.0-x86_64.iso
mkdir /mnt/alpine
mount -t iso9660 -o loop,offset=0 /alpine-virt-3.8.0-x86_64.iso /mnt/alpine/

Producción:

mount: /mnt/alpine/: mount failed: Unknown error -1

Aquí alpine-virt-3.8.0-x86_64.isose utiliza sólo con fines de prueba.

Respuesta1

Supongo que se trata de un problema de permisos, donde el contenedor no tiene privilegios suficientes para realizar una operación de montaje().

Verifique lo siguiente:

http://man7.org/linux/man-pages/man7/capabilities.7.html

y

https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

Lo más probable es que necesites: CAP_SYS_ADMINpara que funcione, lo cual es extremadamente poderoso.

Dependiendo del sistema operativo/distribución que esté utilizando, también puede ser que SELinux esté activo y bloquee el permiso.

Depende de cuál sea su caso de uso, pero en general en un sistema de producción recomendaría buscar otra solución. Definitivamente, elevar los privilegios del contenedor al nivel SYS_ADMIN no debe considerarse una idea segura. Por ejemplo, realice el montaje fuera del contenedor y asigne la carpeta montada.

Respuesta2

De forma predeterminada, no puede ejecutar mount dentro de un contenedor, lo que podría permitir a los usuarios escapar del aislamiento del contenedor (por ejemplo, montar el sistema de archivos raíz del host). Puede configurar el contenedor para que se ejecute con capacidades adicionales para permitir el comando de montaje si confía en su aplicación comohargut sugiere.

Sin embargo, mi enfoque preferido sería montar los datos en el contenedor como un volumen. Descargaría el archivo fuera de la ventana acoplable y luego lo montaría:

wget http://dl-cdn.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.0-x86_64.iso
docker run -i -t --rm --mount type=volume,dst=/mnt/alpine,volume-driver=local,volume-opt=type=iso9660,\"volume-opt=o=loop,offset=0\",volume-opt=device=$(pwd)/alpine-virt-3.8.0-x86_64.iso ubuntu:16.04

También puede crear un volumen con nombre con opciones similares pasadas a ese comando si desea poder montar este volumen con un nombre reutilizable.

información relacionada