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

问题描述 投票:0回答:2

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

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

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

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

bash docker shell dockerfile docker-cmd
2个回答
37
投票

除了已经指出了有关 Docker 最佳实践的一些问题的评论之外,您还可以从 start.sh 脚本中启动

background
进程,并使用
start.sh
nohup 脚本本身保留在 foreground
命令和与号 (
&
)。我没有尝试使用
mongod
但您的
start.sh
脚本中类似以下内容可以工作:

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

0
投票

当然还有关于如何启动多个服务的官方 Docker 文档,同样使用脚本文件而不是

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 基础镜像,它允许在一个容器中运行多个进程。因此,您可以使用像

runit
这样的服务管理程序来运行系统服务,例如 cron 或其他进程。

有关 phusion 基础镜像在您的用例中是否是一个不错的选择的更多信息可以在 here

找到

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

© www.soinside.com 2019 - 2024. All rights reserved.