Назад | Перейти на главную страницу

Как я могу предоставить доступ к устройствам с обратной связью, которые динамически создаются в контейнере Docker?

У меня есть небольшой контейнер Docker, из которого я могу получить доступ к / dev / loop0. Для этого я добавил docker run:

--device=/dev/loop-control:/dev/loop-control \
--device=/dev/loop0:/dev/loop0 \

На этом устройстве с обратной связью я создаю два или более разделов с помощью parted / fdisk.

Теперь мне нужно смонтировать оба раздела, но, к сожалению, я не могу получить доступ ни к одному из них. /dev/loop0p1 или /dev/loop0p2 или любой другой динамически созданный раздел.

Есть ли способ получить к ним доступ, не создавая контейнер --privileged?

Спасибо.

Хотя вопрос старый, это все еще проблема.

Ядро Linux не передает события регистрации устройств в контейнеры, поэтому /dev/* файлы не отображаются в контейнере для устройств, которые добавляются во время работы контейнера.

В качестве обходного пути в контейнере вы можете искать отсутствующие файлы устройств и создавать их, как в следующем сценарии оболочки:

FILTER='^loop'
lsblk --raw -a --output "NAME,MAJ:MIN" --noheadings | grep -E "$FILTER" | while read LINE; do
    DEV=/dev/$(echo $LINE | cut -d' ' -f1)
    MAJMIN=$(echo $LINE | cut -d' ' -f2)
    MAJ=$(echo $MAJMIN | cut -d: -f1)
    MIN=$(echo $MAJMIN | cut -d: -f2)
    [ -b "$DEV" ] || mknod "$DEV" b $MAJ $MIN
done

(Я использовал FILTER='^(r|n)bd' соответствовать /dev/rbdX и /dev/nbdX в моем случае устройства ceph создаются динамически.)

Имейте в виду, что приведенный выше сценарий не отменяет регистрацию устройств, удаленных на хосте. Если вам также нужно это сделать, вы также можете запустить следующее (FILTER необходимо указать):

find /dev -mindepth 1 -maxdepth 1 -type b | cut -d/ -f3 | grep -E "$FILTER" | sort > /tmp/devs-created
lsblk --raw -a --output "NAME" --noheadings | grep -E "$FILTER" | sort > /tmp/devs-available
for ORPHAN in $(comm -23 /tmp/devs-created /tmp/devs-available); do
    rm /dev/$ORPHAN
done

Если ваши устройства создаются динамически, вы можете периодически запускать оба сценария в контейнере.

Вам все еще нужно запустить свой контейнер --privileged для работы с устройствами.

Также см этот комментарий к проблеме моби мой сценарий основан на.