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

030*_*030 5 dmesg docker centos7

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

docker run -it <dockerImageName> dmesg
Run Code Online (Sandbox Code Playgroud)

结果是:

dmesg: read kernel buffer failed: Permission denied
Run Code Online (Sandbox Code Playgroud)

尝试

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

小智 7

正如迈克尔·汉普顿(Michael Hampton)提到的,容器旨在仅运行单个原子服务。事实上,人们应该明白容器不是虚拟机,而是本地主机上的一个进程。

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

我能够让 SystemD 在从 centos:centos7 构建的映像中工作:

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

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

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

  • 所以解决方案是使用 `--privileged` :) 。帮助我查看 `dmesg` 并使用 CIFS 挂载!谢谢。 (3认同)