【问题标题】:Can't run dmidecode on docker container无法在 docker 容器上运行 dmidecode
【发布时间】:2019-06-01 18:06:41
【问题描述】:

我正在尝试在我的 docker 容器中运行命令 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

这让我很困惑。因为我能够在主机(ubuntu 14.04)上运行dmidecode -t system 很好。

我什至听从了一些建议并设置了 dmidecode 可执行文件的权限

setcap cap_sys_rawio+ep /usr/sbin/dmidecode

还是不行。

有什么想法吗?

更新

根据 David Maze 的回答,命令应该是

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

仅当您要信任容器中运行的内容时才执行此操作。例如,如果您在原始操作系统上测试安装过程。

【问题讨论】:

  • 您希望dmidecode 在 docker 容器上返回什么?为什么容器会有 DMI(或 SMBIOS)? (这是一个包含系统硬件组件描述的表格)
  • 我希望容器运行 ubuntu 16.04 并希望 dmidecode 从容器中获取主机的硬件信息。不要介意这种情况下的安全问题,因为我可以信任运行容器的软件。

标签: linux docker containers


【解决方案1】:

Docker 提供了一个隔离层,而 Docker 的主要目标之一是对容器隐藏主机硬件的详细信息。查询主机硬件低级详细信息的最简单、最合适的方法是从主机上的根 shell,完全忽略 Docker。

这个的实际机制是通过限制 Linux capabilitiescapabilities(7) 需要CAP_SYS_RAWIO 才能访问/dev/mem 的文档,因此原则上您可以使用--cap-add SYS_RAWIO 启动您的容器。您可能需要其他功能和/或设备访问权限才能使其真正发挥作用,因为 Docker 将您尝试访问的内容的详细信息作为设计目标隐藏。

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2018-02-27
    • 2019-02-17
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2022-07-18
    • 2018-11-25
    • 2019-05-16
    相关资源
    最近更新 更多