基本 Docker 容器报告运行级别未知

Basic Docker container reports runlevel unknown

当我 运行 一个基本的 Docker 容器(来自 Google 云 Shell 中)时,就像这样

docker pull debian
docker run -i -t debian:wheezy /bin/bash

然后在运行ning容器的shell提示符下输入runlevel,运行级别为unknown。我是否应该安装(apt-get)特定的软件包以添加对 运行 级别的支持。如果是这样,哪些或其他可能是错误的?

Docker 是应用程序隔离工具,而不是 OS 虚拟化工具。运行级别处于 OS 级别,OS 出现,安装目录并启动服务以达到 运行 级别。在一个容器中,你的应用程序被启动,结束。您可以假设容器处于单个用户 运行 级别,因为您是唯一访问该环境的用户,但安装应用程序确实无关紧要。

BMitch 是对的。 Docker 与运行级别无关,它永远不会改变运行级别。但还有更多。

runlevel unknown 在某些系统上很常见 运行 systemd。不过,您的问题标有 Debian 和 Debian Jessie(最新的 Debian 版本,使用 systemd,使用兼容性脚本来打印运行级别)。基于 Arch 的发行版和不稳定的基于 RedHat 的发行版(例如 Fedora)在执行 runlevel 时打印 unknown,即它们甚至不关心打印假的运行级别。

如果您检查运行级别脚本,您将在最近的发行版中获得以下输出:

$ ls -l $(which runlevel)
lrwxrwxrwx 1 root root 9 Jun 18 14:44 /usr/bin/runlevel -> systemctl

(在 arch 上,runlevel 在 Debian 上 /usr/sbin,但在 Debian 上它也指向 systemctl

runlevel 脚本指向 sysemtd 对最新发行版的控制。

一般来说,runlevel 对最近的发行版没有任何意义(因为 systemd 几乎每个人都转向了)。如果您查看 /etc/rc.d/rc*.d/ 目录,它们几乎是空的。

真正定义 init 如何处理系统启动的是 systemd 默认目标,位于此处:

/lib/systemd/system/default.target

/etc/systemd/system/default.target,如果存在的话。