【问题标题】:Access OpenShift template parameter inside Dockerfile访问 Dockerfile 中的 OpenShift 模板参数
【发布时间】:2018-10-05 17:16:16
【问题描述】:

OpenShift 构建参数(使用 OpenShift Docker 构建策略)是否会作为 Docker 构建参数 (ARG) 或环境变量 (ENV) 自动暴露给 Dockerfiles,或者这是否需要在 @987654324 中进行显式配置@例如在这些地方:

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

我要问的原因是我有一个带有多个参数的模板,还没有明确的配置,但是在 Dockerfile 中可以访问某些参数的明显情况(如$VAR) 和其他参数不是($VAR 是空)。在进一步调试我的情况之前,我想了解正常行为。

更新我现在为模板中的“missing”参数添加了oc explain bc.spec.strategy.dockerStrategy.buildArgs 部分,如下所示:

strategy:
  type: Docker
  dockerStrategy:
    buildArgs:
    - name: VAR
      value: ${VAR}

但它的值在构建的容器中仍然是空的,而我预计它是true(因为我用oc new-app ... VAR=true 开始构建。所以其他东西也一定是错的。

【问题讨论】:

  • 设置了哪些?一般来说,答案是参数不会以任何方式自动传递给构建。系统确实为与构建相关的事物设置了一些值,但它们没有链接到模板参数。

标签: docker openshift


【解决方案1】:

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

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

该脚本还负责从Dockerfile(例如ARG VAR)中删除某些参数定义,并将对它们的引用替换为对相应OpenShift模板参数的引用(例如$VAR${VAR})。这个想法是让脚本将Dockerfile 转换为也适用于独立 Docker 环境的Dockerfile,使其能够通过模板并行化服务于 OpenShift 的 Docker 构建策略。

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

更新我现在已经从我的补丁脚本中删除了用于操作参数的特殊逻辑,并在bc.spec.strategy.dockerStrategy.buildArgs 下引入了构建参数。条目如下所示:

buildArgs:
- name: VAR
  value: ${VAR}

所以基本上,现在构建配置进行复制(而不是我的补丁脚本替换)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多