Петлевые устройства предоставляются модулем ядра. Поэтому вам нужны особые привилегии для доступа к ним. Вам также нужно, чтобы они были выставлены в ваш контейнер, или вам нужно вручную создавать файлы устройства.
Быстрый ответ
docker run --privileged=true ...
Альтернатива
sudo losetup /dev/loop0 test.img
mount /dev/loop0 /mnt
docker run -v /mnt:/mnt ...
Это почти работает
docker run --device=/dev/loop-control:/dev/loop-control --device=/dev/loop0:/dev/loop0 --cap-add SYS_ADMIN ...
Однако я получаю эту ошибку:
root@5c033d5f8625:/# sudo mount /dev/loop0 /mnt
mount: block device /dev/loop0 is write-protected, mounting read-only
mount: cannot mount block device /dev/loop0 read-only
Смотрите эту ссылку для получения дополнительной информации .
Примечание на man-странице systemd-nspawn:
systemd-nspawn ограничивает доступ к различным интерфейсам ядра в контейнере только для чтения, таким как / sys, / proc / sys или / sys / fs / selinux. Сетевые интерфейсы и системные часы не могут быть изменены изнутри контейнера. Узлы устройства не могут быть созданы. Хост-система не может быть перезагружена, и модули ядра не могут быть загружены из контейнера.
--capability=CAP_MKNOD
все еще работает? Для меня это, кажется, не имеет никакого эффекта, яOperation not permitted
даже с этим согласен, как и этот пользователь и этот пользователь .