在 docker 中启动进程,与入口点分开

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

我正在使用一个 docker 镜像,其基本镜像是 bookworm-slim。 我认为该映像没有办法对启动服务进行排队(也许我也必须安装它?),但我想与我计划在 ENTRYPOINT 中执行的任何应用程序一起运行 CRON。

有没有一种更干净的方法可以在不使用 shell 脚本的情况下运行 cron 和入口点应用程序?

最精简的方法是什么?

docker
1个回答
0
投票

有没有一种更干净的方法可以在不使用 shell 脚本的情况下运行 cron 和入口点应用程序?

如果您想要通用解决方案,则需要一个 shell 脚本作为您的

ENTRYPOINT
,它在后台运行
cron
,然后运行您的主要命令。比如:

#!/bin/sh

cron
exec "$@"

这假设您使用的是 Debian

cron
软件包中的
cron
,它会自动将自身置于后台。对于容器化
cron
守护进程来说,这可能不是最佳选择,因为它记录到 syslog 而不是 stdout(并且您没有在容器内运行 syslog 服务)。我经常使用 busybox 中的 crond,它具有用于记录到文件而不是系统日志的选项(并且“文件”可以包括
/dev/stdout
之类的内容),但 Debian
busybox
软件包不包括
crond

请注意,在许多情况下,在单独的容器中运行

cron
比设置具有多个主进程的容器更有意义。这是否有意义实际上取决于您的特定用例。


您的

ENTRYPOINT
不一定是 shell 脚本;你可以用你最喜欢的编译语言编写一个小程序来完成同样的事情,并将其用作你的
ENTRYPOINT
...但为此目的使用 shell 通常是最简单的解决方案。

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