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

时间:2016-02-29 23:31:42

标签: docker alpine

我正在使用来自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镜像并运行它。我看不到输出(BLINK!...)我的脚本在/ bin中,我可以运行它,这样可行。我的blink脚本在/etc/init.d中,符号链接到/ etc / runlevels / default。所以的所有内容看起来都很好,但似乎没有任何东西可以运行。

如果我尝试:'rc-service blink start'我看不到“BLINK!”但是,但确实得到了这个:

 * WARNING: blink is already starting

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以在主命令启动之前找到我的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的配置等等