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

Commands to execute background process in Docker CMD

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

CMD ["sh","start.sh"]

我想在后台示例

中使用进程 运行 执行 shell 命令

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

除了对你的问题的评论已经指出了一些关于 Docker 最佳实践的事情之外,你无论如何都可以从你的 start.sh 中启动一个 background 进程] 脚本并使用 nohup 命令和符号 (&) 将 start.sh 脚本本身保留在 前景 中。我没有用 mongod 尝试过,但是你的 start.sh 脚本中的类似下面的东西可以工作:

#!/bin/sh
...
nohup sh -c mongod --dbpath /test &
...

当然还有如何启动多个服务的official Docker documentation,再次使用脚本文件而不是CMD。 docker 文档还说明了如何使用 supervisord 作为进程管理器:

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"]

如果这是一个选项,您可以使用 phusion 基础映像,它允许 运行 在一个容器中安装多个进程。因此,您可以 运行 系统服务,例如 cron 或其他使用服务主管的进程,例如 runit

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

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