我正在查看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]
答案 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来安装它。