当前位置: 首页 > 面试题库 >

为什么在FROM中之后在Dockerfile中不能再次使用build arg?

呼延钱明
2023-03-14
问题内容

我正在使用Docker
18.05.0~ce~3-0~ubuntu,我想将构建参数传递给FROM和Dockerfile中的其他行。您希望以下内容能起作用:

ARG FROM_IMAGE=ubuntu:bionic
FROM $FROM_IMAGE

COPY sources_list/$FROM_IMAGE /etc/apt/sources.list

它适用于第二行(FROM),但其行为类似于未在该COPY行中设置:

步骤1/3:ARG FROM_IMAGE = ubuntu:bionic步骤2/3:FROM $ FROM_IMAGE —>
8626492fecd3 […]步骤3/3:COPY sources_list / $ {SOURCES_LIST_FILE}
/etc/apt/sources.list失败复制文件:复制目录失败:mkdir
/var/lib/docker/overlay2/0536b4e280ddca2fec18db9d79fa625a8be86efdbaaea5b3dbbefcdaaab3f669/merged/etc/apt/sources.list:不是目录

如果添加另一个单独的build arg,则它适用于同一COPY行:

ARG FROM_IMAGE=ubuntu:bionic
FROM $FROM_IMAGE

ARG SOURCES_LIST_FILE
COPY sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list

步骤4/4:COPY sources_list / $ {SOURCES_LIST_FILE} /etc/apt/sources.list —>
7f974fffe929

为什么我不能FROM_IMAGEFROM一行和一行之后两次使用build arg ?我找不到任何记录在案的这种限制。


问题答案:

为什么在FROM行上或之后不能两次使用FROM_IMAGE build arg?

实际差异取决于您将ARG与FROM行相关的位置:

  • 可以在任何FROM行中使用第一个FROM之前的任何ARG
  • 在构建阶段(在FROM之后)中的任何ARG都可以在该构建阶段中使用

这与构建阶段的机制有关,可以在此处找到一些实际行为参考:https :
//github.com/docker/cli/pull/333,以及有关文档和构建机制为何在ARG使用上有些混乱的讨论在这里:https
:
//html" target="_blank">github.com/moby/moby/issues/34129



 类似资料:
  • 问题内容: 我注意到在实施时有些奇怪。这就是在OpenJDK 7u40中的样子 : 这就是从OpenJDK 8u40开始的样子 : 我知道现在可以将null用作空映射,因此需要在局部变量中进​​行附加检查和缓存。但是为什么要用for循环代替? 似乎此提交中引入了更改。不幸的是,我找不到任何解释说明为什么普通的for循环会比更好。它更快吗?或更安全? 问题答案: 我将尝试总结评论中提出的三个更合理的

  • 问题内容: 我的Dockerfile创建一个目录,将其chown,然后再列出该目录。该目录仍归root用户所有。这是为什么? 这是Dockerfile: 这是“ docker build”的输出: Docker版本1.2.0,构建fa7b24f 主机运行Ubuntu 12.04,但具有3.13.0-36通用内核。 问题答案: 回答我自己的问题:它声明为卷。如果取出VOLUME指令,则将生效。 此外

  • 因此,容器的端口就是我在“索引文件”中定义的端口(常量端口=3000)。我在这里要问的是,为什么在DockerFile中使用容器的端口而不是“expose”端口? 谢谢你的解释。

  • 代码显示了我的问题,我不能在。 错误消息是: /home/linuxbrew/。linuxbrew/Cellar/gcc/11.1。0_1/include/c/11.1。0/范围:1775:48:错误:传递'std::ranges::take_view

  • 我正在尝试使用文件系统。我的< code>CMakeLists.txt中有< code>-std=c 11 -std=c 1y。GCC版本为4.9.2。然而,我得到了一个错误: 使用的正确方法是什么?

  • 问题内容: 当我看到Python的编译器软件包的文档时,我感到很惊讶,但是注意到它已经在Python 3.0中消失了,没有任何明确的替换或解释。 我似乎在python-dev上找不到有关如何做出此决定的任何讨论-有人对此决定有任何见识吗? 问题答案: 我相信该功能现已内置: 编译 AST