dmidecode Operation not permitted

在Docker容器中使用dmidecode命令时遇到权限拒绝问题,通过添加--privileged参数成功解决,使容器能读取/dev/mem信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在制作一个Docker,把/dev/mem mount到容器里面,并且把容器启动:

sudo docker run -ti -p 12345:8080 --mount type=bind,source=/dev/mem,destination=/dev/mem myImage:v1 /bin/bash

发现在容器里面执行dmidecode命令会出现:

Operation not permitted

这个错误。

解决方法

启动的时候需要添加privileged 这个参数

sudo docker run -ti -p 12345:8080 --mount type=bind,source=/dev/mem,destination=/dev/mem --privileged myImage:v1 /bin/bash

官方解释

在这里插入图片描述
从上面的官方描述来看,加上了这个参数能让容器获得跟宿主机上面root近似的权限,可以读取一些设备的信息。所以加上了这个参数,才能读取到/dev/mem的信息。

### 安装和使用 `dmidecode` 命令 当尝试执行 `dmidecode` 命令而收到 `-bash: dmidecode: command not found` 的错误消息时,表明该命令并未安装在当前系统上。为了能够正常使用此工具,需按照如下方法进行操作。 对于基于 Debian 或 Ubuntu 的发行版,可以通过 APT 包管理器来安装: ```shell sudo apt-get update && sudo apt-get install dmidecode ``` 针对 Red Hat、CentOS 或 Fedora 发行版本,则应利用 YUM 或 DNF 来完成安装过程: ```shell sudo yum install dmidecode # 对于 CentOS/RHEL 7 及更早版本 sudo dnf install dmidecode # 针对 CentOS/RHEL 8 和 Fedora 用户 ``` 一旦成功安装完毕之后,便可通过终端输入 `dmidecode | grep 'Serial Number'` 获取硬件序列号信息[^4]。 值得注意的是,在某些情况下即使已经正确安装了软件包仍然会遭遇同样的报错情况;此时应当确认 `/sbin`, `/usr/sbin` 是否被加入到了环境变量 PATH 中去。通常来说,默认配置下的 root 账户拥有完整的路径设置,而非特权账户可能不具备访问这些目录的能力。因此建议普通用户切换至超级管理员身份后再重试上述指令以排除此类可能性[^2]。 另外一种可能是由于 SELinux 设置所引起的权限不足问题阻止了程序正常运行。这时可以临时关闭安全增强功能来进行测试(仅限排查阶段),具体做法是在 grub 启动菜单处添加参数 `selinux=0` 并重启计算机生效。不过出于安全性考虑不推荐长期保持这种状态,解决问题后记得恢复默认选项并调整相应策略文件允许必要的读取/写入行为[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值