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