【问题标题】:Why can't I use the build arg again after FROM in a Dockerfile?为什么我不能在 Dockerfile 中的 FROM 之后再次使用构建参数?
【发布时间】:2018-10-21 20:12:06
【问题描述】:

我正在使用 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_IMAGE ---> 8626492fecd3 [...] 步骤 3/3:复制 sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list 复制文件失败:复制目录失败:mkdir /var/lib/docker/overlay2/0536b4e280ddca2fec18db9d79fa625a8be86efdbaaea5b3dbefcdaaab3f669/merged/etc/apt/sources.list: 不是目录

如果添加另一个单独的构建参数,它适用于相同的 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 步:复制 sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list ---> 7f974fffe929

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

【问题讨论】:

    标签: docker dockerfile docker-build


    【解决方案1】:

    为什么我不能在 FROM 行前后使用 FROM_IMAGE 构建参数两次?

    根据您将与 FROM 行相关的 ARG 放在哪里,存在真正的差异:

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

    这与构建阶段机制有关,实际行为的一些参考可以在这里找到:https://github.com/docker/cli/pull/333,关于为什么文档和构建机制对 ARG 的使用有点混乱的讨论在这里:https://github.com/moby/moby/issues/34129

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多