Dokku多进程(容器)与Dockerfile项目
我正在寻找http://progrium.viewdocs.io/dokku/process-management/并试图找出如何从单个项目获得多个服务。
我有一个Dockerfile的回购:
FROM wjdp/flatcar ADD . app RUN /app/bin/install.sh EXPOSE 8000 CMD /app/bin/run.sh
run.sh
启动一个单线程的Web服务器。 这工作正常,但我想运行几个服务。
我试着用一行web: /app/bin/run.sh
制作一个Procfile
,然后从web: /app/bin/run.sh
删除CMD
行。 这不起作用,因为没有一个命令来运行Docker容器不会保持活着,dokku变得难过:
remote: Error response from daemon: Cannot kill container ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e: Container ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e is not running remote: Error: failed to kill containers: [ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e]
你最好的select可能是使用supervisord。 Supervisord是一个非常轻量级的stream程pipe理器。
你可以用你的CMD启动supervisord,然后把你想启动的所有进程放到supervisord.conf文件中。
有关更多信息,请查看有关此的Docker文档: https : //docs.docker.com/articles/using_supervisord/ 。 最相关的摘录(摘自该页,但被重写):
你会把它放到你的Dockerfile中:
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf CMD ["/usr/bin/supervisord"]
而supervisord.conf文件将包含这样的内容:
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:apache2] command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
显然,你还需要确保supervisord是安装在你的图像开始。 这是大部分发行版的一部分,所以你可以使用yum或apt-get来安装它。