我如何使用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等等