Как использовать правила udev для управления / dev / xxx при работе в контейнере

Во-первых, я хочу сказать, что я действительно не хочу изменять / dev / random 's доступ к продукту. Это всего лишь тест для проверки, когда systemd работает в moby, правила udev в /etc/udev/rules.d/xxxx поведение

Вопрос 1: почему только при использовании –priviledged контейнера допустимы правила управления udev контейнера в файле /etc/udev/rules.d/xxx?

какая система власти нужна, если systemd необходимо использовать udev для управления / dev / xxx с помощью /etc/udev/rules.d/xxx?

Question2: когда я запускаю использование контейнера –priviledged, почему перезагрузка контейнера изменит доступ к phycalhost'у / dev / xxx и использует правила /host //ru/ru/rux физического хоста? Я думаю, что это не разумно

Распространение

redhat 7.2

В случае отчета об ошибке: шаги по воспроизведению проблемы

запустите контейнерA без каких-либо привилегий

[root@physicalhost /home/ahao.mah] #docker run -d --net host reg.docker.xxxxx.com/mybase/centos7u2:latest 36cc8f6759294b2b2900b313c4f978737b11671b7ab2cc185e69fba3f6a9d10c [root@containerA /home/ahao.mah] #docker exec -it 36cc8f6759294b2b2900b313c4f978737b11671b7ab2cc185e69fba3f6a9d10c bash 

изменить правила udev в containerA:

 [root@containerA /] #cat /etc/udev/rules.d/70-test_random.rules KERNEL=="random", GROUP="root", MODE="0665", OPTIONS="last_rule" 

перезапустите этот контейнерA:

 [root@physicalhost /home/ahao.mah] #docker restart 36cc8f675929 36cc8f675929 

containerA / dev / random все еще 0666, но не 0665

 [root@containerA /] #ll /dev/random crw-rw-rw- 1 root root 1, 8 Aug 8 11:34 /dev/random 

В данный момент я не знаю, почему правила /etc/udev/rules.d/xxx недействительны в контейнере no -priviledges?

запустить контейнерB с –priviledge

 [root@physicalhost /home/ahao.mah] #docker run -d --net host --privileged reg.docker.xxxxx.com/mybase/centos7u2:latest [root@containerB /home/ahao.mah] #docker exec -it 1853437e8d2ea7018475b2328a10f1625da8b0c667941d69d912598325dc830d bash 

Теперь доступ к контейнеру / dev / random по умолчанию также является 0666, но я хочу изменить / dev / random / random доступ к контейнеру в 0660, тогда мне нужно использовать правила udev в /etc/udev/rules.d/xxx

 [root@containerB /] #ll /dev/random crw-rw-rw- 1 root root 1, 8 Aug 8 11:40 /dev/random [root@containerB /] #vim /etc/udev/rules.d/70-test_random.rules KERNEL=="random", GROUP="root", MODE="0660", OPTIONS="last_rule" 

Теперь доступ к физическому хосту / dev / random по умолчанию – 0666, но я изменяю физический / dev / произвольный доступ к 0777

 [root@physicalhost /] #cat /etc/udev/rules.d/70-test_random.rules #KERNEL=="random", GROUP="root", MODE="0777", OPTIONS="last_rule" [root@physicalhost /] #ll /dev/random #crw-rw-rw- 1 root root 1, 8 Aug 8 11:40 /dev/random 

перезапустить контейнерB:

 [root@physicalhost /home/ahao.mah] #docker restart 1853437e8d2e 1853437e8d2e 

оба варианта containerB / dev / random и physicalhost / dev / access изменены!

 [root@containerB /] #ll /dev/random crw-rw---- 1 root root 1, 8 Aug 8 11:41 /dev/random [root@physicalhost /home/ahao.mah] #ll /dev/random crwxrwxrwx 1 root root 1, 8 Aug 8 11:43 /dev/random 

Мои взгляды:

  1. Я думаю, что это связано с тем, что система работает в докере
  2. при работе с –priviledges, systemd, запущенный в докере, не должен изменять доступ к физическому хосту / dev / xxx с помощью /etc/udev/rules.d/xxx
  3. при запуске без полномочий – systemd, работающий в docker, должен изменить доступ к контейнеру / dev / xxx с помощью /etc/udev/rules.d/xxx

One Solution collect form web for “Как использовать правила udev для управления / dev / xxx при работе в контейнере”

Я получил свое решение, когда в контейнере, созданном –privileged, этот контейнер имеет / sys rw-доступ, а service systemd-udev-trigger.serivce может быть исключен. это означает, что udevadm может запускать uevent to / sys / devices / / / uevent и физический хост также может получить этот uevent, а затем физическое использование /etc/udev/rules.d/xxx

точкой запуска udevadm является указание ядру отправлять события для всех присутствующих устройств. Это делается путем записи в / sys / devices / / / uevent. Для этого требуется, чтобы sysfs был установлен read-write on / sys.

  • Как запустить пользовательские скрипты на подключаемом устройстве USB-устройства?
  • Привязка к системным устройствам подключенных устройств Bluetooth
  • Подключите Android-телефон ZTE к Linux (Fedora) для USB-отладки и передачи файлов
  • udev weirdness: / dev / hda1 смонтирован, но файл отсутствует
  • Как отладить правило udev (в /etc/udev/rules.d/...)
  • Udev: cmd выполняется при подключении устройства, но ничего не делает
  • UDev автоматизирует диски как «usbhd», независимо от типа и имени на Ubuntu 12.10
  • Уведомление Udev в том и только в том случае, если я подключаю внешний монитор
  • Как я могу заставить udev принимать массовое хранение и отвергать все остальное?
  • Могу ли я маскировать ядро ​​uevent?
  • Какова цель правила udev?
  • Udev: запуск shellscript, который обращается к X-дисплею
  • Interesting Posts

    Как переключиться с / etc / shadow на / etc / passwd?

    Показать счетчик в LXDE

    cd ~ работает в одном сеансе терминала, но не в другом (об ошибке не сообщается)

    Имя хоста не будет разрешено после настройки нового сервера

    Каковы минимальные системные требования для окончательной версии 4.2

    Как удалить java на Linux Mint 12

    Использовать альтернативы или добавить в PATH?

    Загрузка темы для входа в GNOME (Монетный двор 16 Петра)

    X-рендеринг текста уродливый, если какой-либо не общий драйвер используется

    Установленные расширения хрома centos 7 дают ERROR_RE_ENCODING_THEME_IMAGE

    Увеличение столбца каждый раз, когда выполняется скрипт

    Динамически менять фон рабочего стола из сценария bash

    Скопируйте файлы с родительской папкой в ​​новый каталог

    Как я могу использовать один из весов семейства шрифтов с fontconfig?

    Ubuntu 16.04 с файловой системой только для чтения и записываемым слоем

    Linux и Unix - лучшая ОС в мире.