在Dockerfile

时间:2018-10-05 17:16:16

标签: docker openshift

OpenShift构建参数(采用OpenShift Docker构建策略)是否将自动作为Docker构建参数(Dockerfiles或环境变量(ARG)公开给ENV,还是这样做? BuildConfig中的显式配置,例如在这些地方:

oc explain bc.spec.strategy.dockerStrategy.buildArgs
oc explain bc.spec.strategy.dockerStrategy.env

我要问的原因是我有一个带有几个参数的模板,还没有显式配置,但是很明显的情况是,某些参数可以在Dockerfile内部访问(如$VAR),而其他参数则不能({{ 1}}是空的。在进一步调试情况之前,我想了解正常的行为。

更新,我现在为模板的“缺少”参数添加了一个$VAR部分,如下所示:

oc explain bc.spec.strategy.dockerStrategy.buildArgs

,但是当我希望它是strategy: type: Docker dockerStrategy: buildArgs: - name: VAR value: ${VAR} 时,它的值在构建的容器中仍然是空的(因为我是从true开始构建的。因此,某些其他地方也一定是错误的。

1 个答案:

答案 0 :(得分:0)

事实证明,这是我采用OpenShift Docker构建策略的特定方式的副作用。

我在文件中维护单独的Dockerfile,并使用脚本patch.sh将其插入上载的模板中。这很方便,因为存储在Dockerfile中的oc explain bc.spec.source.dockerfile需要进行某些转义(以YAML表示),并且脚本会对此进行处理。如果必须更新Dockerfile(在开发过程中经常发生),我只需要使用逐字Dockerfile语法编辑文件,然后重新运行脚本即可。

脚本还负责从Dockerfile(例如ARG VAR)中删除某些参数定义,并用对相应的OpenShift模板参数(例如$VAR至{{ 1}})。这个想法是为了使脚本将${VAR}(也适用于独立的Docker环境)转变为可以通过模板并行化为OpenShift的Docker构建策略提供服务的环境。

发生实际错误是因为我添加了一个新的模板参数,但没有相应地调整脚本。现在情况恢复正常。

更新现在,我从补丁脚本中删除了用于处理参数的特殊逻辑,并在Dockerfile下引入了构建参数。条目看起来像这样:

bc.spec.strategy.dockerStrategy.buildArgs

因此,基本上,现在构建配置会进行复制(而不是用我的补丁脚本进行复制)。