如何使用OpenRC(Alpine)在Docker中自动启动服务



我使用的是 iron.io 的阿尔卑斯山风味。 我想在 Docker 映像启动时自动运行一个微不足道的"闪烁"脚本作为服务。(我想要以此为基础不了解/关心此服务的衍生图像 - 它只是被"继承"并运行。 我为此使用了 S6,效果很好,但想看看 Alpine 中已经内置的东西是否可以开箱即用。

我的 Dockerfile:

FROM iron/scala
ADD blinkin /bin/
ADD blink /etc/init.d/
RUN rc-update add blink default

还有我的服务脚本:

#!/sbin/openrc-run
command="/bin/blinkin"
depend()
{
    need localmount
}
/

bin/blinkin 脚本:

#!/bin/bash
for I in $(seq 1 5);
do
    echo "BLINK!"
    sleep 1
done

所以我构建了 Docker 镜像并运行它。 我没有看到输出(闪烁...) 我的脚本在/bin 中,我可以运行它,这很有效。 我的 blink 脚本在/etc/init.d 中,并符号链接到/etc/runlevels/default。 所以一切看起来都很好,但似乎没有任何东西运行。

如果我尝试:"rc-service 闪烁启动",我看不到"闪烁!",但确实得到这个:

 * WARNING: blink is already starting

我做错了什么?

您可能会发现我的dockerfy实用程序很有用,启动服务,在主命令启动之前预运行初始化命令。见 https://github.com/markriggins/dockerfy

例如:

RUN wget https://github.com/markriggins/dockerfy/releases/download/0.2.4/dockerfy-linux-amd64-0.2.4.tar.gz; 
    tar -C /usr/local/bin -xvzf dockerfy-linux-amd64-*tar.gz; 
    rm dockerfy-linux-amd64-*tar.gz;

ENTRYPOINT dockerfy 
COMMAND --start bash -c "while true; do echo BLINK; sleep 1; done" -- 
    --reap -- 
    nginx 

将 bash 脚本作为服务运行,每秒回显 BLINK,而主命令nginx运行。 如果nginx退出,则BLINK服务将自动停止。

作为额外的好处,nginx留下的任何僵尸进程都将自动清理。

您还可以将日志文件(如/var/log/nginx/error.log)尾部为 stderr,在启动前编辑 nginx 的配置等等

相关内容

  • 没有找到相关文章

最新更新