Не могу запустить dmidecode в док-контейнере - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь запустить команду dmidecode в моем док-контейнере,

docker run --device /dev/mem:/dev/mem -it jin/ubu1604

Тем не менее, он утверждает, что нет разрешения

root@bd1062dfd8ab:/# dmidecode
# dmidecode 3.0
Scanning /dev/mem for entry point.
/dev/mem: Operation not permitted
root@bd1062dfd8ab:/# ls -l /dev
total 0
crw--w---- 1 root tty  136, 0 Jan  7 03:21 console
lrwxrwxrwx 1 root root     11 Jan  7 03:20 core -> /proc/kcore
lrwxrwxrwx 1 root root     13 Jan  7 03:20 fd -> /proc/self/fd
crw-rw-rw- 1 root root   1, 7 Jan  7 03:20 full
crw-r----- 1 root kmem   1, 1 Jan  7 03:20 mem
drwxrwxrwt 2 root root     40 Jan  7 03:20 mqueue
crw-rw-rw- 1 root root   1, 3 Jan  7 03:20 null
lrwxrwxrwx 1 root root      8 Jan  7 03:20 ptmx -> pts/ptmx
drwxr-xr-x 2 root root      0 Jan  7 03:20 pts
crw-rw-rw- 1 root root   1, 8 Jan  7 03:20 random
drwxrwxrwt 2 root root     40 Jan  7 03:20 shm
lrwxrwxrwx 1 root root     15 Jan  7 03:20 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root     15 Jan  7 03:20 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root     15 Jan  7 03:20 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root root   5, 0 Jan  7 03:20 tty
crw-rw-rw- 1 root root   1, 9 Jan  7 03:20 urandom
crw-rw-rw- 1 root root   1, 5 Jan  7 03:20 zero

Это смутило меня. Так как я смог запустить dmidecode -t system на хосте (Ubuntu 14.04) нормально.

Я даже последовал некоторому совету и установил разрешение на исполняемый файл dmidecode

setcap cap_sys_rawio+ep /usr/sbin/dmidecode

Это все еще не работает.

Есть идеи?

UPDATE

Основываясь на ответе Дэвида Мазе, команда должна быть

run --device /dev/mem:/dev/mem --cap-add SYS_RAWIO -it my/ubu1604a

Делайте это только тогда, когда вы собираетесь доверять тому, что работает в контейнере. Например, если вы тестируете процедуру установки на нетронутой ОС.

1 Ответ

0 голосов
/ 07 января 2019

Docker обеспечивает уровень изоляции, и одна из основных целей Docker - скрыть детали оборудования хоста от контейнеров. Самый простой и подходящий способ запрашивать низкоуровневые сведения об оборудовании хоста - из корневой оболочки хоста, полностью игнорируя Docker.

Фактический механизм этого заключается в ограничении возможностей Linux . возможностей (7) документов, которые вам необходимы CAP_SYS_RAWIO для доступа к /dev/mem, поэтому в принципе вы можете запустить свой контейнер с помощью --cap-add SYS_RAWIO. Возможно, вам понадобятся другие возможности и / или доступ к устройству, чтобы это на самом деле работало, потому что Docker скрывает детали того, к чему вы пытаетесь получить доступ, в качестве цели разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...