4

我正在使用来自 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 中,我可以运行它,并且可以运行。我的眨眼脚本在 /etc/init.d 中并符号链接到 /etc/runlevels/default。所以一切看起来都很好,但似乎没有任何运行。

如果我尝试: 'rc-service blink start' 我看不到“BLINK!” outbut,但一定要明白:

 * WARNING: blink is already starting

我究竟做错了什么?

4

1 回答 1

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 的配置等等

于 2016-07-17T21:23:35.297 回答