Tho*_*sch 9 docker dockerfile docker-build
我正在学习如何在 Dockerfiles 中使用 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"
Run Code Online (Sandbox Code Playgroud)
当我构建它时:
docker build --build-arg my_arg=my_value
并运行它:
docker run <resulting-image>
我没有看到预期的输出,这将是
my_value other_default
Run Code Online (Sandbox Code Playgroud)
相反,我看到的是空字符串。我究竟做错了什么?
Dan*_*iel 17
至少从 开始20.10.2,ARGs 就可以从行外传递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"
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中,每一FROM行都会启动一个新镜像,并且通常会重置构建环境。如果您的图像需要指定ARGs,则它们需要在该FROM行之后;如果是多阶段构建,则需要根据需要在每个图像中重复它们。 ARGbefore 第一个FROM仅用于允许行中的变量FROM,但不能用于其他情况。
这将在Dockerfile 文档中的了解 ARG 和 FROM 如何交互下进一步讨论。
FROM centos:7
# _After_ the FROM line
ARG my_arg
ARG other_arg=other_default
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1825 次 |
| 最近记录: |