官方Gentoo Dockerfile包含这一行:
RUN sed -e 's/#rc_sys=""/rc_sys="docker"/g' -i /etc/rc.conf
截至目前,Gentoo 的默认初始化是 OpenRC。
如果我使用 运行 docker 映像CMD /sbin/init
,发出 OpenRC 类型的命令会给出响应
You are attempting to run an openrc service on a system which openrc did not boot.
...并且确实strings /sbin/init | grep -q "sysvinit"
给出了SYSVINIT
然而,同样从上面的链接来看,OpenRC是基于sysvinit的,所以这可能是正确的。
如果我使用 运行 docker 映像CMD /sbin/openrc
,该映像将无法启动,并声称存在依赖性错误。
如果我想在 OpenRC 下运行多个进程,我应该将 /etc/rc.conf 改回“”(没什么特别的)吗?
“docker”RC 系统有什么特别之处吗?它是否可能假定没有初始化系统,而是只期望一个正在运行的进程?
/etc/rc.conf 中的“docker”RC 就使用的 init 系统而言意味着什么?
答案1
如果您查看许多boot
运行级别初始化脚本,例如/etc/init.d/hostname
,您将看到如下所示的块:
依靠() { 关键字-docker -lxc -prefix -systemd-nspawn }
这表明 init 脚本不应在任何这些系统类型上自动使用(您可以查看联机帮助页openrc-run(8)
以获取完整说明keyword
)。
这些脚本仍然可以手动启动,但在自动初始化依赖项构建期间不会被考虑。如果脚本被显式添加到运行级别,我不记得立即的行为。