在Docker CMD中执行后台进程的命令

时间:2015-07-22 09:27:47

标签: bash shell docker dockerfile

我正在使用Dockerfile创建一个docker镜像。我想在启动docker容器时执行一些脚本。目前我有一个shell脚本来执行所有必要的进程

  

CMD [“sh”,“start.sh”]

我想使用在后台示例中运行的进程执行shell命令

  

CMD [“sh”,“ - c”,“mongod --dbpath / test&”]

2 个答案:

答案 0 :(得分:25)

除了您已经指出了一些关于Docker最佳做法的问题的评论之外,您还可以从start.sh脚本中启动后台进程并保留{{1}使用start.sh命令和&符号(nohup)在 foreground 中编写脚本本身。我没有使用&进行尝试,但您mongod脚本中的以下内容可能有效:

start.sh

答案 1 :(得分:0)

当然还有official Docker documentation如何启动多个服务,再次使用脚本文件而不是await db.query(` SELECT * from local `) 。 docker 文档还说明了如何使用 supervisord 作为进程管理器:

CMD

如果这是一个选项,您可以使用 phusion 基础镜像,它允许在一个容器中运行多个进程。因此,您可以使用诸如 FROM ubuntu:latest RUN apt-get update && apt-get install -y supervisor RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY my_first_process my_first_process COPY my_second_process my_second_process CMD ["/usr/bin/supervisord"] 之类的服务主管来运行系统服务,例如 cron 或其他进程。

有关 phusion 基础映像是否适合您的用例的更多信息,请参见 here

关于如何避免在容器中运行更多进程的 ruby​​ 重点描述,除了您的应用程序,您可以找到 here。详细说明过于详细,无法在 SO 上重复。