在 Dockerfile 中使用 ARG 和 ENV
Using ARG and ENV in Dockerfile
我正在学习如何在 Dockerfile 中使用 ARG 和 ENV。
我有这个简单的 Dockerfile:
ARG my_arg
ARG other_arg=other_default
FROM centos:7
ENV MY_ENV $my_arg
ENV OTHER_ENV $other_arg
CMD echo "$MY_ENV $OTHER_ENV"
当我构建它时:
docker build --build-arg my_arg=my_value
和运行它:
docker run <resulting-image>
我没有看到预期的输出,即
my_value other_default
相反,我看到的是空字符串。
我做错了什么?
在 Dockerfile 中,每 FROM
行开始一个新的镜像,并且通常会重置构建环境。如果您的图像需要指定 ARG
s,则它们需要在 之后 FROM
行;如果是多阶段构建,则需要根据需要在每个图像中重复它们。在第一个 FROM
之前的 ARG
仅对允许 FROM
行中的变量有用,但不能用于其他情况。
这将在 Dockerfile 文档的 Understand how ARG and FROM interact 下进一步讨论。
FROM centos:7
# _After_ the FROM line
ARG my_arg
ARG other_arg=other_default
...
至少因为 20.10.2
,ARG
s 可以从 FROM
行之外传递,你需要做的就是插入另一个 ARG
FROM
:
之后的名称
ARG my_arg
ARG other_arg=other_default
FROM centos:7
# These need to be re-stated here to use the ARGs above.
ARG my_arg
ARG other_arg # This will be populated with the default value 'other_default'.
ENV MY_ENV $my_arg
ENV OTHER_ENV $other_arg
CMD echo "$MY_ENV $OTHER_ENV"
我正在学习如何在 Dockerfile 中使用 ARG 和 ENV。 我有这个简单的 Dockerfile:
ARG my_arg
ARG other_arg=other_default
FROM centos:7
ENV MY_ENV $my_arg
ENV OTHER_ENV $other_arg
CMD echo "$MY_ENV $OTHER_ENV"
当我构建它时:
docker build --build-arg my_arg=my_value
和运行它:
docker run <resulting-image>
我没有看到预期的输出,即
my_value other_default
相反,我看到的是空字符串。 我做错了什么?
在 Dockerfile 中,每 FROM
行开始一个新的镜像,并且通常会重置构建环境。如果您的图像需要指定 ARG
s,则它们需要在 之后 FROM
行;如果是多阶段构建,则需要根据需要在每个图像中重复它们。在第一个 FROM
之前的 ARG
仅对允许 FROM
行中的变量有用,但不能用于其他情况。
这将在 Dockerfile 文档的 Understand how ARG and FROM interact 下进一步讨论。
FROM centos:7
# _After_ the FROM line
ARG my_arg
ARG other_arg=other_default
...
至少因为 20.10.2
,ARG
s 可以从 FROM
行之外传递,你需要做的就是插入另一个 ARG
FROM
:
ARG my_arg
ARG other_arg=other_default
FROM centos:7
# These need to be re-stated here to use the ARGs above.
ARG my_arg
ARG other_arg # This will be populated with the default value 'other_default'.
ENV MY_ENV $my_arg
ENV OTHER_ENV $other_arg
CMD echo "$MY_ENV $OTHER_ENV"