Dokku多进程(容器)与Dockerfile项目

时间:2015-10-21 03:46:09

标签: docker dockerfile dokku

我正在查看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服务器。这很好,但我想运行几项服务。

我尝试使用单行Procfile创建web: /app/bin/run.sh 并从Dockerfile中删除CMD行。如果没有命令来运行Docker容器并不能保持活着并且dokku感到悲伤,那么这不起作用:

remote: Error response from daemon: Cannot kill container ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e: Container ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e is not running
remote: Error: failed to kill containers: [ae9d50af17deed4b50bc8327e53ee942bbb3080d3021c49c6604b76b25bb898e]

1 个答案:

答案 0 :(得分:0)

你最好的选择可能是使用supervisord。 Supervisord是一个非常轻量级的流程管理器。

您可以使用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来安装它。