在 Docker 上运行 dmesg 导致“dmesg:读取内核缓冲区失败:权限被拒绝”

在 Docker 上运行 dmesg 导致“dmesg:读取内核缓冲区失败:权限被拒绝”

为了调试原因这个问题发生在容器上运行以下命令:

docker run -it <dockerImageName> dmesg

结果是:

dmesg: read kernel buffer failed: Permission denied

尝试

  1. 运行docker run -it <dockerImageName> sudo dmesg返回同样的问题

答案1

作为迈克尔·汉普顿前面提到,容器仅用于运行单个原子服务。事实上,我们应该明白,容器不是虚拟机,而是本地主机上的单个进程。

尽管如此,我还是知道,让 SystemD 在容器内工作有点困难这里

我能够让 SystemD 在 FROM centos:centos7 构建的映像内运行:

docker run --privileged -ti -e “container=docker” -v /sys/fs/cgroup:/sys/fs/cgroup trinitronx/ansible-base:stable-centos7 /usr/sbin/init

由于某些未记录的原因,变量 container=docker 显然是需要的。/sys/fs/cgroup 也是必需的,因为根据 RedHat Bug 1033604,SystemD 需要 cgroups 才能正常工作。

完成此操作后,尝试使用登录容器docker exec -it <container> /bin/bash,然后就可以执行systemctl命令了。

相关内容