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

我正在使用iron.io的阿尔卑斯风味。 我想在Docker映像启动时自动运行一个简单的“闪烁”脚本作为服务。 (我想要派生的图像,使用这个作为基础,不知道/关心这个服务 – 这只是“inheritance”,并运行。)我用这个S6,这工作得很好,但想看看是否阿尔卑斯已经build成的东西可以开箱即用。

我的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 

所以我构buildDocker镜像并运行它。 我看不到输出(闪烁!)我的脚本是在/斌,我可以运行它,并且工作。 我的blink脚本在/etc/init.d中,并且符号链接到/ etc / runlevels / default。 所以一切看起来不错,但似乎没有任何东西已经运行。

如果我尝试:'rc-service blink start',我看不到“闪烁!” 不过,但要做到这一点:

  * 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脚本作为服务,在主命令nginx运行的同时,每秒都会响应BLINK。 如果nginx退出,则BLINK服务将自动停止。

作为一个额外的好处,任何由nginx遗留的僵尸进程都会被自动清理。

您还可以将日志文件(如/var/log/nginx/error.log)logging到stderr,在启动之前编辑nginx的configuration等等