2.9.2. 调用镜像中嵌入的脚本


通常,构建器镜像提供自己的 S2I 脚本版本,它适用于最常用的用例。如果这些脚本无法满足您的需要,S2I 提供了在 .s2i/bin 目录中添加自定义脚本覆盖它们的方法。但是,这样做代表完全替换了标准脚本。在某些情况下这是可以接受的,但在其他情况下,您可能更愿意在脚本之前(或之后)执行一些命令,同时保留镜像中提供的脚本逻辑。在这种情况下,您可以创建一个执行自定义逻辑的 wrapper 脚本,并将它进一步分配给镜像中的默认脚本。

要确定构建器镜像内的脚本位置,请查看 io.openshift.s2i.scripts-url 标签的值。使用 docker inspect:

$ docker inspect --format='{{ index .Config.Labels "io.openshift.s2i.scripts-url" }}' openshift/wildfly-100-centos7
image:///usr/libexec/s2i

您检查了 openshift/wildfly-100-centos7 构建器镜像,并发现这些脚本位于 /usr/libexec/s2i 目录中。

使用这个知识,请从您自己的脚本中嵌套其调用。

例 2.1. .s2i/bin/assemble 脚本

#!/bin/bash
echo "Before assembling"

/usr/libexec/s2i/assemble
rc=$?

if [ $rc -eq 0 ]; then
    echo "After successful assembling"
else
    echo "After failed assembling"
fi

exit $rc

这个示例显示了一个自定义 assemble 脚本,它打印这个信息,从镜像中执行标准 assemble 脚本,并根据 assemble 脚本的退出代码打印另一个信息。

当嵌套 run 脚本时,您必须 使用 exec 来调用它来确保正确处理信号。以前,使用 exec 也无法在调用默认镜像运行脚本后运行附加命令。

例 2.2. .s2i/bin/run 脚本

#!/bin/bash
echo "Before running application"
exec /usr/libexec/s2i/run
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.