在Docker容器中运行后台脚本


8

在我的Dockerfile中,我运行一个脚本:

RUN /bin/sh -c scripts/init.sh

在内部init.sh&不会执行所有以结尾的命令:我无法运行后台进程。知道为什么吗?


试图使用init.sh的完整路径吗?
ebal

@ebal不,为什么?在init.sh的其他命令中可以使用相对路径。我明天试试。
clemtoy

为了解决我的问题,我docker exec -d my_command在构建后使用...
clemtoy

您能解释一下您要做什么吗?这是您需要在映像构建时运行还是在容器内部运行的后台进程?运行后台任务后,您的初始化脚本是否退出?
马特

Answers:


1

我遇到了类似的问题,以下类似问题对我有所帮助。

RUN nohup bash -c "scripts/init.sh &" && sleep 4

在许多情况下,您启动的服务器尚未完全就绪。为了让服务器有更多时间准备就绪,请添加一个sleep命令。参数sleep的大小取决于您启动的服务,您可能需要对其进行调整。

阅读更多关于此文档


0

我的第一个想法是在容器内创建服务,而不是使用nohupor 来运行它们,而是将&它们作为系统服务运行,而您不需要在init.sh中处理它们。

但这不是“真正的”泊坞窗方法。如果您需要运行多个服务,请将它们分离到不同的容器(1个容器-1个服务)中,然后将它们全部与docker-compose解决方案放在一起。


0

要在后台运行某些程序:

RUN bash -c "sh ./scripts/init.sh & sleep 5 && tail -F /dev/null"

这将运行您的脚本,并立即休眠5秒钟,然后使容器永久运行。使用此技术,您可以在Docker中运行多个命令。

您可以删除tail -F /dev/null或替换为下一个不会退出并保持容器运行的命令/服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.