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

如何更改if语句中的docker ARG值?,docker,docker-build,Docker,Docker Build,在我使用docker 17.12.1-ce的Ubuntu 16.04上的docker文件中 为了构建docker容器,我想调用docker build--build arg ver=v1.来设置一个特殊的包 Dockerfile中的代码处理部分是 RUN if[ "x$ver" = "xv1" ] ; then pkg=v1.2.3 ; fi RUN echo $pkg 不幸的是,ARG pkg变量未更新,echo语句始终显示其初始值 我能做什么,在if语句中更新我的构建变量pkg?您将无法将

在我使用docker 17.12.1-ce的Ubuntu 16.04上的docker文件中

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

Dockerfile中的代码处理部分是

RUN if[ "x$ver" = "xv1" ] ; then pkg=v1.2.3 ; fi
RUN echo $pkg
不幸的是,ARG pkg变量未更新,echo语句始终显示其初始值


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

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

if [ $ver="v1" ]; then pkg=1.2.3; fi; docker build --build-arg ver=$ver --build-arg pkg=$pkg .

不知何故,我希望ARG变量在整个构建过程的范围内,而不仅仅是在单个RUN语句中?Dockerfile有其局限性。如果您需要更大的灵活性,可以使用模板格式或在bash中编写Dockerfile
if [ $ver="v1" ]; then pkg=1.2.3; fi; docker build --build-arg ver=$ver --build-arg pkg=$pkg .