在我的Dockerfile中,我想定义稍后可以在Dockerfile中使用的变量。
我知道该ENV
指令,但是我不希望这些变量是环境变量。
有没有一种方法可以在Dockerfile范围内声明变量?
在我的Dockerfile中,我想定义稍后可以在Dockerfile中使用的变量。
我知道该ENV
指令,但是我不希望这些变量是环境变量。
有没有一种方法可以在Dockerfile范围内声明变量?
Answers:
您可以使用ARG
-请参阅https://docs.docker.com/engine/reference/builder/#arg
该
ARG
指令定义了一个变量,用户可以在构建时docker build
使用带有--build-arg <varname>=<value>
标志的命令将 变量传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则构建会输出错误。
据我所知,仅ENV
允许这样做,如“ 环境替换 ”中所述
环境变量(使用该
ENV
语句声明)也可以在某些指令中用作Dockerfile解释的变量。
它们必须是环境变量,以便在Dockerfile的每一行创建的每个新容器中重新声明docker build
。
换句话说,这些变量不是直接在Dockerfile中解释,而是在为Dockerfile行创建的容器中直接解释,因此使用环境变量。
今天,我同时使用ARG
(docker 1.10+和docker build --build-arg var=value
)和ENV
。单独
使用ARG
意味着您的变量在构建时可见,而不在运行时可见。
我的Dockerfile通常具有:
ARG var
ENV var=${var}
在您的情况下,ARG
就足够了:我通常使用它来设置http_proxy变量,这意味着docker build需要在构建时访问互联网。
要回答您的问题:
在我的Dockerfile中,我想定义稍后可以在Dockerfile中使用的变量。
您可以使用以下方法定义变量:
ARG myvalue=3
等号周围不能有空格。
稍后将其用于:
RUN echo $myvalue > /test
如果在同一RUN
条指令中重复使用该变量,则只需设置一个shell变量即可。我真的很喜欢他们使用官方的Ruby Dockerfile来解决这个问题。
RUN foo=$(date) && echo $foo