我试图在容器构建和启动后启动像cron和supervisor这样的服务,但这些服务没有启动,我需要在容器中手动执行命令。
我的意图是,一旦容器启动,这些服务就已经在运行。
我创建了一个shell脚本,它适用于Caddy Server start,但不适用于其他服务。
我的init-services.sh
#!/bin/sh
/usr/bin/caddy --conf /etc/Caddyfile --log stdout
service supervisor start
service cron start
我的Dockerfile的一部分
RUN apt-get update && apt-get install --no-install-recommends -y \
wget \
nano \
git \
unzip \
iputils-ping \
gnupg \
supervisor \
cron
COPY .docker/scripts/init-services.sh /usr/bin/init-services
RUN chmod +x /usr/bin/init-services
CMD ["/usr/bin/init-services"]
发布于 2018-08-02 09:34:22
您可以通过在运行命令(CMD)中以前台模式运行您的主管来实现这一点。
首先,创建包含所需服务的supervisord.conf。您还需要在nodaemon
模式下启动所有服务,这是前台模式。举个例子,如果你打算启动一个apache服务器,你需要在你的supervisord.conf中设置-D标志,如下所示;
command=/bin/bash -c "/usr/local/bin/gosu root /sbin/httpd -D FOREGROUND"
您需要将此supervisord.conf文件复制到Dockerfile文件中,如下所示;
COPY supervisord.conf /etc/supervisord.d/supervisord.conf
之后,您可以在init-services.sh文件中以前台模式启动supervisord服务,如下所示;
/usr/bin/supervisord -c /etc/supervisord.d/supervisord.conf -n
https://stackoverflow.com/questions/51639364
复制相似问题