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来安装它。