我们开始更新我们的基本图像以使用新的S6-反层V3。一个迁移文章还解释了有关此变化的新可能性。这篇博客文章解释了能够使用我们的新基础图像所需的最小变化。
我们已经更新了示例附加组件包括新行为。
最低限度
添加init:false
向您的插件config.yaml
如果您还没有这个。在V3中,S6强制使用其初始化。如果使用Docker默认系统初始化,则在启动插件时会看到以下错误:
s6范围层:致命:只能以PID 1运行
确保您的所有可执行/脚本文件都在GIT存储库Rootfs文件夹上设置了执行权限。您可以使用以下方式更新权限:
$ git update-index -chmod =+x rootfs/etc/service.d/my-service/run
如果您使用结束
例如,在您的S6-反层服务中,要停止在错误上的容器,您必须替换行S6 -SVSCANCTL -T/var/run/s6/服务
和/run/s6/stasir/bin/halt
。
Apparmor
你必须调整你的Apparmor个人资料为了使其与新的S6反层合作。我们使用默认配置文件更新了文档。需要进行以下更改:
#s6-overlay
/initi ix,
/bin/** ix,
/usr/bin/** ix,
/run/{s6,s6-rc*,service}/** ix,
/package/** ix,
/命令/** ix,
/etc/services.d/xper rwix,
/etc/cont-init.d/xphdy rwix,
/Etc/cont-finish.d/xper rwix,
/run/{,**} rwk,
/dev/tty rw,
host_pid
选项
启用没有保护模式的无插件可以设置host_pid:true
在其配置中。如前所述文档:
允许在主机PID名称空间上运行容器。仅适用于不受保护的附加组件。
这是一个问题,因为S6期望是PID 1(实际上是在标语)使用主机PID名称空间是不可能的。
在v2中,S6实际上并未检查它是否以PID 1的形式运行解决方法以这种方式运行时,请防止S6破坏系统)。在V3 S6中,检查它实际上是PID 1,否则拒绝启动。
要解决此问题,请不要在插件中使用S6叠加层,因为它不是为此用例设计的。您可以通过覆盖来继续使用插件基础图像/在里面
使用NO-OP脚本,然后使用普通Docker Init System。或者,您可以切换到其他基本图像,例如库存高山或Debian,并添加所需的内容。