【问题标题】:Is there a way to use If condition in Dockefile?有没有办法在 Dockerfile 中使用 If 条件?
【发布时间】:2018-08-16 13:06:33
【问题描述】:

我是docker 的新手,我正在寻找一种在 docker 容器中执行命令的方法,具体取决于环境。

在 Dockerfile 中,我有 2 个命令,command_a 和 command_b。如果env = 'prod' 运行command_a,否则运行command_b。我怎样才能做到这一点?

我尝试如下:

RUN if [ $env = "prod" ] ; then echo command_a; else echo cpmmand_b; fi;

如何实现所需的行为?

PS: 我知道回声不应该在那里。

【问题讨论】:

  • 我认为你有正确的方法来做到这一点。 Docker 不提供条件语句
  • 当你尝试这样做时发生了什么?
  • 嗯,它评估 RUN 语句中的条件,一切都像 bash 或 shell 一样
  • @Henry - 它当然只是打印了 :D 它没有执行。
  • 所以基本上它按预期工作。现在只需将echo command_a 替换为您要运行的命令即可。

标签: docker dockerfile


【解决方案1】:

Docker 17.05 及更高版本支持一种使用多阶段构建和构建参数的条件。看看https://medium.com/@tonistiigi/advanced-multi-stage-build-patterns-6f741b852fae

来自博文:

ARG BUILD_VERSION=1
FROM alpine AS base
RUN ...
FROM base AS branch-version-1
RUN touch version1
FROM base AS branch-version-2
RUN touch version2
FROM branch-version-${BUILD_VERSION} AS after-condition
FROM after-condition 
RUN ...

然后使用docker build --build-arg BUILD_VERSION=value ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2012-01-22
    • 1970-01-01
    • 2020-12-24
    • 2012-12-06
    相关资源
    最近更新 更多