我有一个多过程网络应用程序。这些过程是由不同的构建包贡献的。默认进程将启动web应用程序。我有一个用例,在这个用例中,应该在默认流程调用之前执行给定的shell脚本。
我尝试了以下方法;
The entrypoint.sh
#!/usr/bin/env bash
# Some fancy stuff..
#Invoke the web process
/cnb/process/web从自定义构建包的构建脚本创建lauch.toml。使入口点进程成为默认进程。
cat > "$layers_dir/launch.toml" << EOL
[[processes]]
type = "entrypoint"
command = "bash"
args = ["$scriptlayer/bin/entrypoint.sh"]
default = true
EOL
echo -e '[types]\nlaunch = true' > "$layers_dir/assembly-scripts.toml"截断pack inspect-image输出
Processes:
TYPE SHELL COMMAND ARGS
entrypoint (default) bash bash /layers/gw_assembly-scripts/assembly-scripts/bin/entrypoint.sh
task bash catalina.sh run
tomcat bash catalina.sh run
web bash catalina.sh run是否有任何更好的CNB本机方法来实现这个用例?
发布于 2022-03-29 12:42:28
你在这里有几个选择:
.profile脚本添加到应用程序的根。这是一个bash脚本,所以您可以在bash中编写任何东西,但是,它主要用于初始化应用程序和设置额外的env变量。
此文件在进程类型中的命令之前运行。我查找了有关此行为的文档,但只找到了在buildpack规范中简要提到了。
例如,如果我将.profile放在我的应用程序的根目录和该文件中,我将编写echo 'Hello World!'。在执行任何流程类型之前,我将看到Hello World!被打印出来。.profile脚本来实现类似于二进制的功能。
这是一个二进制文件,它是启动映像的一部分,在任何进程类型之前都会运行。它允许您在应用程序启动之前执行初始化应用程序和动态设置附加环境变量的操作。
这种机制经常由buildpack作者使用,根据对环境变量或Kubernetes服务绑定的更改,在运行时提供动态行为。例如,打开/关闭APM工具、调试和度量等功能。其他一些杂项笔记。
.profile和exec.d)运行之前选择的,您不能从内部影响它。您只能在流程类型运行之前使用它们来运行事物。A combined processes list derived from all launch.toml files such that process types from later buildpacks override identical process types from earlier buildpacks。entrypoint始终是launcher。launcher是一个运行并实现buildpack规范的应用程序端的进程。。它运行.profile、exec.d二进制文件,设置buildpack,提供环境变量,并最终启动指定的进程类型。
如果你重写容器的入口点,那么发射器不会运行,它应该做的任何事情都不会发生。有时这是需要的,就像您正在排除故障一样,但是通常您希望发射器是入口点。https://stackoverflow.com/questions/71657328
复制相似问题