Mounten Sie ein ISO9660 im Ubuntu:16.04-Container

Mounten Sie ein ISO9660 im Ubuntu:16.04-Container

Ich versuche, einen in einem Ubuntu-Docker-Container zu mounten iso9660, aber ich bekomme eine 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/

Ausgabe:

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

Es alpine-virt-3.8.0-x86_64.isowird hier nur zu Testzwecken verwendet.

Antwort1

Ich vermute, dass es sich hier um ein Berechtigungsproblem handelt und der Container nicht über ausreichende Berechtigungen verfügt, um einen Mount()-Vorgang auszuführen.

Überprüfe das Folgende:

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

Und

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

Höchstwahrscheinlich benötigen Sie: CAP_SYS_ADMINum es zum Laufen zu bringen, was extrem leistungsstark ist.

Abhängig davon, welches Betriebssystem/welche Distribution Sie verwenden, kann es auch sein, dass SELinux aktiv ist und die Berechtigung blockiert.

Hängt von Ihrem Anwendungsfall ab, aber im Allgemeinen würde ich auf einem Produktionssystem eine andere Lösung empfehlen. Die Erhöhung der Containerberechtigungen auf die SYS_ADMIN-Ebene ist definitiv keine sichere Idee. Führen Sie beispielsweise die Bereitstellung außerhalb des Containers durch und ordnen Sie den bereitgestellten Ordner zu.

Antwort2

Standardmäßig können Sie mount nicht innerhalb eines Containers ausführen, da dies Benutzern ermöglichen könnte, die Containerisolation zu umgehen (z. B. das Host-Root-Dateisystem zu mounten). Sie können den Container so konfigurieren, dass er mit zusätzlichen Funktionen ausgeführt wird, um den Befehl mount zuzulassen, wenn Sie Ihrer Anwendung vertrauen.har schlägt vor.

Ich würde jedoch das Mounten der Daten in den Container als Volume bevorzugen. Dazu lädst du die Datei außerhalb von Docker herunter und mountest sie dann:

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

Sie können auch ein benanntes Volume mit ähnlichen Optionen erstellen, die an diesen Befehl übergeben werden, wenn Sie dieses Volume mit einem wiederverwendbaren Namen mounten möchten.

verwandte Informationen