在 ubuntu:16.04 容器中掛載 iso9660

在 ubuntu:16.04 容器中掛載 iso9660

iso9660我嘗試在 ubuntu docker 容器中安裝 ,但我得到了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/

輸出:

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

這裡alpine-virt-3.8.0-x86_64.iso僅用於測試目的。

答案1

我猜想這是一個權限問題,容器沒有足夠的權限來執行 mount() 操作。

檢查以下內容:

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

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

您很可能需要: CAP_SYS_ADMIN讓它正常工作,這是非常強大的。

根據您使用的作業系統/發行版,SELinux 也可能處於活動狀態,並且成為權限的封鎖者。

取決於您的用例,但一般來說在生產系統上我建議採用另一種解決方案。將容器權限提升到 SYS_ADMIN 等級絕對不被認為是一個安全的想法。例如,在容器外部進行掛載,並對應掛載的資料夾。

答案2

預設情況下,您無法在容器內執行 mount,這可能允許使用者逃避容器隔離(例如掛載主機根檔案系統)。如果您信任您的應用程序,您可以將容器配置為使用額外的功能運行,以允許 mount 命令哈古特建議

但是,將資料作為磁碟區安裝到容器中將是我的首選方法。您可以在 docker 外部下載該文件,然後掛載它:

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

如果您希望能夠使用可重複使用的名稱掛載此卷,您也可以建立命名卷,並將類似的選項傳遞給該命令。

相關內容