首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在云本机构建包中实现类似“入口点”的功能

在云本机构建包中实现类似“入口点”的功能
EN

Stack Overflow用户
提问于 2022-03-29 06:21:59
回答 1查看 269关注 0票数 1

我有一个多过程网络应用程序。这些过程是由不同的构建包贡献的。默认进程将启动web应用程序。我有一个用例,在这个用例中,应该在默认流程调用之前执行给定的shell脚本。

我尝试了以下方法;

  1. 创建自定义构建包
  2. 创建一个需要执行的脚本,并在其中调用web进程。
  3. 通过在launch.toml定义中指定新进程,根据上面的shell sciprt创建一个新进程
  4. 使buildpack可启动

The entrypoint.sh

代码语言:javascript
复制
#!/usr/bin/env bash

# Some fancy stuff.. 

#Invoke the web process  
/cnb/process/web

从自定义构建包的构建脚本创建lauch.toml。使入口点进程成为默认进程。

代码语言:javascript
复制
    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输出

代码语言:javascript
复制
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本机方法来实现这个用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-29 12:42:28

你在这里有几个选择:

  1. 最简单的选择是将.profile脚本添加到应用程序的根。这是一个bash脚本,所以您可以在bash中编写任何东西,但是,它主要用于初始化应用程序和设置额外的env变量。 此文件在进程类型中的命令之前运行。我查找了有关此行为的文档,但只找到了在buildpack规范中简要提到了。 例如,如果我将.profile放在我的应用程序的根目录和该文件中,我将编写echo 'Hello World!'。在执行任何流程类型之前,我将看到Hello World!被打印出来。
  2. 如果您想要创建一个buildpack,您可以通过让您的buildpack包含一个.profile脚本来实现类似于二进制的功能。 这是一个二进制文件,它是启动映像的一部分,在任何进程类型之前都会运行。它允许您在应用程序启动之前执行初始化应用程序和动态设置附加环境变量的操作。 这种机制经常由buildpack作者使用,根据对环境变量或Kubernetes服务绑定的更改,在运行时提供动态行为。例如,打开/关闭APM工具、调试和度量等功能。

其他一些杂项笔记。

  1. 以上两个选项都不允许您更改实际的流程类型。将执行的流程类型是在这些选项(.profileexec.d)运行之前选择的,您不能从内部影响它。您只能在流程类型运行之前使用它们来运行事物。
  2. buildpack规范不允许buildpack修改另一个buildpack的流程类型。因此,您不能创建包装或修改由另一个buildpack设置的流程类型的buildpack。也就是说,buildpack可以覆盖由另一个buildpack设置的流程类型。稍后在order组中的buildpacks将覆盖早期的Buildpacks。 来自规范:A combined processes list derived from all launch.toml files such that process types from later buildpacks override identical process types from earlier buildpacks
  3. 对于构建包,entrypoint始终是launcherlauncher是一个运行并实现buildpack规范的应用程序端的进程。。它运行.profileexec.d二进制文件,设置buildpack,提供环境变量,并最终启动指定的进程类型。 如果你重写容器的入口点,那么发射器不会运行,它应该做的任何事情都不会发生。有时这是需要的,就像您正在排除故障一样,但是通常您希望发射器是入口点。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71657328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档