如何更改 if 语句中的 docker ARG 值?

x y*_*x y 6 docker docker-build

在我使用docker 17.12.1-ceUbuntu 16.04上的 Dockerfile 中

ARG ver=latest
ARG pkg=master
Run Code Online (Sandbox Code Playgroud)

为了构建一个 docker 容器,我想调用docker build --build-arg ver=v1 .以设置一个特殊的包。

我的 Dockerfile 中的代码处理部分是

RUN if[ "x$ver" = "xv1" ] ; then pkg=v1.2.3 ; fi
RUN echo $pkg
Run Code Online (Sandbox Code Playgroud)

不幸的是,ARG pkg变量没有更新,并且 echo 语句始终显示其初始值。

我能做什么,更新if 语句中的构建变量pkg ?

b0g*_*usb 3

您将无法将变量从一个命令传递RUN到另一个命令,因为每个RUN命令都在不同的 shell 中执行。解决你的问题的方法是将逻辑提取到脚本中并使用构建参数执行 docker,如下所示:

if [ $ver="v1" ]; then pkg=1.2.3; fi; docker build --build-arg ver=$ver --build-arg pkg=$pkg .
Run Code Online (Sandbox Code Playgroud)