ubuntu:16.04コンテナにiso9660をマウントする

ubuntu:16.04コンテナにiso9660をマウントする

iso9660Ubuntu 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() 操作を実行するための十分な権限がないと考えられます。

次の点を確認してください。

詳しくは、man7.org/linux/man-pages/man7/capabilities.7.html を参照してください。

そして

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

おそらく、 CAP_SYS_ADMINこれを動作させるには以下が必要になります。これは非常に強力です。

使用している OS/ディストリビューションによっては、SELinux がアクティブになっていて、権限がブロックされている可能性もあります。

ユースケースによって異なりますが、一般的に実稼働システムでは別のソリューションをお勧めします。コンテナーの権限を SYS_ADMIN レベルに昇格することは、決して安全なアイデアとは言えません。たとえば、コンテナーの外部でマウントし、マウントされたフォルダーをマップします。

答え2

デフォルトでは、コンテナ内でマウントを実行することはできません。これにより、ユーザーがコンテナの分離から逃れることができる可能性があります(ホストのルートファイルシステムをマウントするなど)。アプリケーションを信頼できる場合は、マウントコマンドを許可する追加の機能を使用してコンテナを実行するように構成できます。ハーグットは示唆する

ただし、データをボリュームとしてコンテナにマウントするのが私の推奨するアプローチです。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

再利用可能な名前でこのボリュームをマウントできるようにするには、そのコマンドに渡される同様のオプションを使用して名前付きボリュームを作成することもできます。

関連情報