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

格特维季克

我正在使用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 : //github.com/moby/moby/issues/34129

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章