我正在开发一个基于Phusion的baseimage构建的Docker容器,它需要有许多服务只能按需启动。我希望这些服务保留为runit
服务,我只是希望它们不会在启动时自动启动。
如in their documentation所示,您可以通过在/etc/service
中创建一个包含服务名称的文件夹来轻松添加服务,即:/etc/service/jboss
。接下来,您必须在名为chmod +x
的服务目录中创建并run
一个文件,该文件将执行您的服务启动。
如何执行此操作并确保服务不会启动时启动?目标仍然是能够sv start jboss
,但不能在启动时启动。
答案 0 :(得分:4)
将您的服务添加到/etc/sv/<SERVICE_NAME>/
并添加run
可执行文件就像您现在所做的那样。当您准备好运行该服务时,只需将其符号链接到/etc/service
,runit就会将其提取并开始自动运行。
这是一个简短的(非优化的)Dockerfile,显示已禁用的服务和已启用的服务。启用的服务将在Docker运行时启动。禁用的服务在符号链接到/etc/service
之前不会启动,此时runit将在五秒钟内启动它。
FROM phusion/baseimage
RUN mkdir /etc/sv/disabled_service
ADD disabled_service.sh /etc/sv/disabled_service/run
RUN chmod 700 /etc/sv/disabled_service/run
RUN mkdir /etc/sv/enabled_service
ADD enabled_service.sh /etc/sv/enabled_service/run
RUN chmod 700 /etc/sv/enabled_service/run
RUN ln -s /etc/sv/enabled_service /etc/service/enabled_service
CMD ["/sbin/my_init"]
答案 1 :(得分:3)
使用phusion/baseimage:0.9.17
(不确定引入的是哪个版本),您可以在Dockerfile中烘焙RUN touch /etc/service/jboss/down
。它可以防止runit在启动时启动它,你以后仍然可以sv start jboss
。
答案 2 :(得分:0)
我正在查看完全同样的问题(在容器中运行Cassandra时),我还没有找到一个干净的答案。以下是我提出的两种黑客方式。
- 有一个早期的运行级别脚本,可以根据你是否想要在启动时启动一些文件来移出run
文件。
- (mis)使用其中一个service
控件命令runit
实际启动服务并使用虚拟run
命令绕过自动启动。
这两种方法显然都不太理想,但它们已经用于某些目的。