gpt4 book ai didi

docker - 为什么在 Dockerfile 中的 FROM 之后无法再次使用构建参数?

转载 作者:行者123 更新时间:2023-12-02 01:17:41 24 4
gpt4 key购买 nike

我正在使用 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 行中未设置:

Step 1/3 : ARG FROM_IMAGE=ubuntu:bionic Step 2/3 : FROM $FROM_IMAGE ---> 8626492fecd3 [...] Step 3/3 : COPY sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list failed to copy files: failed to copy directory: mkdir /var/lib/docker/overlay2/0536b4e280ddca2fec18db9d79fa625a8be86efdbaaea5b3dbbefcdaaab3f669/merged/etc/apt/sources.list: not a directory

如果添加另一个单独的构建参数,它适用于同一 COPY 行:

ARG FROM_IMAGE=ubuntu:bionic
FROM $FROM_IMAGE

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

Step 4/4 : COPY sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list ---> 7f974fffe929

为什么我不能在 FROM 行中和之后使用两次 FROM_IMAGE 构建参数?我没有找到任何此类限制的记录。

最佳答案

Why can't I use the FROM_IMAGE build arg twice, on and after a FROM line?

根据您放置与 FROM 行相关的 ARG 的位置,存在真正的差异:

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

这与构建阶段机制有关,可以在此处找到一些实际行为的引用:https://github.com/docker/cli/pull/333 ,关于为什么文档和构建机制在 ARG 使用上有点令人困惑的讨论如下:https://github.com/moby/moby/issues/34129

关于docker - 为什么在 Dockerfile 中的 FROM 之后无法再次使用构建参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com