Scope(作用域)
ARG变量的定义从Dockerfile中定义该变量的行开始生效,而不是从命令行参数或其他地方的使用中生效。例如,请思考此Dockerfile:
一个用户构建镜像时执行了下面的命令:
第二行的USER的值会计算为some_user,因为user变量在随后的第三行中被定义了。第四行的USER值会计算为what_user,因为user已经被定义了并且通过命令行将what_user将值传递给了变量。在 ARG指令定义变量之前,任何对该变量的引用都会产生一个空字符串。
ARG指令在定义该指令的构建阶段结束时超出了范围。要在多个阶段使用ARG,每个阶段必须包含 ARG指令。
demo:
如果多个阶段定义了相同名称的ARG变量,当从命令行参数传入新的ARG值时,所有阶段的默认值都会被新传入的值覆盖。
上面两个阶段的输出都为TonyYang is 31 years old。
Last updated