如何向Dockerfile传递参数?

280

我正在使用Dockerfile中的RUN指令来安装一个rpm包。

RUN yum -y install samplerpm-2.3

然而,我想将值"2.3"作为参数传递。

我的RUN指令应该类似于:

RUN yum -y install samplerpm-$arg

$arg=2.3

2个回答

414

从 Docker 1.9 开始,您需要使用 --build-argARG 指令。

请查看 此文档。这将允许您在 Dockerfile 中添加 ARG arg,然后进行构建。

docker build --build-arg arg=2.3 .

2
在完成所有操作后,我遇到了一个错误 没有可用的samplerpm-$arg软件包。看起来参数值2.3没有被替换。 - meallhour
3
那环境变量呢? - Alexander Mills
30
环境变量是一个运行时变量。构建参数是一个编译时变量。这里的区别在于声明变量仅供构建镜像使用,而不希望(或不应该)将其存储为容器运行时的变量。 - Andy Shinn

3
如果在dockerfile中有多个FROM语句,请确保为每个变量重新声明变量/变量,且不赋值,否则在退出块时它们将丢失。
这里有一篇文章更详细地介绍了这个问题:为什么我的Docker ARGs为空? 这是一个例子:
ARG VERSION=latest
FROM ubuntu:${VERSION}

ARG VERSION
ARG FILENAME
COPY ${FILENAME} /home/ubuntu/${FILENAME}

请注意,由于在所示片段中未重复使用VERSION(在FROM语句之后),您实际上不需要在FROM语句之后再次重复“ARG VERSION”。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接