Смонтировать iso9660 в контейнере ubuntu:16.04

Смонтировать iso9660 в контейнере ubuntu:16.04

Я пытаюсь смонтировать 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/capabilities.7.html

и

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

Скорее всего, вам понадобится: 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

Вы также можете создать именованный том с аналогичными параметрами, переданными этой команде, если вы хотите иметь возможность монтировать этот том с повторно используемым именем.

Связанный контент