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.iso
wird 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_ADMIN
um 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.