Monte um contêiner iso9660 no ubuntu:16.04

Monte um contêiner iso9660 no ubuntu:16.04

Eu tento montar um iso9660contêiner docker do Ubuntu, mas recebo um arquivo 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/

Saída:

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

O alpine-virt-3.8.0-x86_64.isoé aqui usado apenas para fins de teste.

Responder1

Acho que este é um problema de permissão, onde o contêiner não possui privilégios suficientes para executar uma operação mount().

Verifique o seguinte:

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

e

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

Provavelmente você precisará de: CAP_SYS_ADMINpara fazê-lo funcionar, o que é extremamente poderoso.

Dependendo de qual sistema operacional/distribuição você está usando, também pode ser que o SELinux esteja ativo e bloqueando a permissão.

Depende de qual é o seu caso de uso, mas em geral, em um sistema de produção, recomendo procurar outra solução. Elevar os privilégios do contêiner para o nível SYS_ADMIN definitivamente não deve ser considerado uma ideia segura. Por exemplo, faça a montagem fora do contêiner e mapeie a pasta montada.

Responder2

Por padrão você não pode executar mount dentro de um contêiner, o que poderia permitir que os usuários escapassem do isolamento do contêiner (por exemplo, montando o sistema de arquivos raiz do host). Você pode configurar o contêiner para ser executado com recursos extras para permitir o comando mount se você confiar em seu aplicativo comoHargut sugere.

No entanto, montar os dados no contêiner como um volume seria minha abordagem preferida. Você baixaria o arquivo fora do docker e depois o montaria:

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

Você também pode criar um volume nomeado com opções semelhantes passadas para esse comando se desejar montar esse volume com um nome reutilizável.

informação relacionada