我正在使用Dockerfile创建一个docker镜像。我想在启动docker容器时执行一些脚本。目前我有一个shell脚本来执行所有必要的进程
CMD [“sh”,“start.sh”]
我想使用在后台示例中运行的进程执行shell命令
CMD [“sh”,“ - c”,“mongod --dbpath / test&”]
答案 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 上重复。