Как использовать правила 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

  • Переключение <esc> и <caps lock> таким образом, который сохраняется с помощью внешних клавиатур
  • Как заставить слайдер MS Natural Ergonomic 4000 работать на Linux Mint?
  • Как назначить драйвер USB для устройства
  • фиксация / dev / ttyUSB
  • Отображение кнопок мыши с помощью udev hwdb
  • Правила Udev, соответствующие выходу команды (или что-то подобное)
  • Правило Udev, позволяющее известным устройствам usb не обнаруживать мои хабы
  • Redhat 7.1 Udev Изменяет правила SYMLINK + И Имя
  • 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.

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