docker - 为什么我不能在 Dockerfile 中的 FROM 之后再次使用构建参数?
问题描述
我正在使用 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:复制 sources_list/${SOURCES_LIST_FILE} /etc/apt/sources.list 失败复制文件:无法复制目录:mkdir /var/lib/docker/overlay2/0536b4e280ddca2fec18db9d79fa625a8be86efdbaaea5b3dbbefcdaaab3f669/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_IMAGE
前后使用 build arg 两次FROM
?我找不到任何记录在案的此类限制。
解决方案
为什么我不能在 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
推荐阅读
- google-apps-script - 如何为 Google 表格中的图形颜色设置“条件格式”?
- ibm-cloud-private - IBM Cloud Private:访问 prometheus 端口 9090 所需的凭证
- php - 仅显示带有 WP_Query 的库存产品中的 WooCommerce
- arrays - 如何通过 uvm 工厂填充动态数组
- docker - 当我将 Renderer.RenderHtmlAsPdf 与 IronPdf 一起使用时,为什么我无法加载共享库“IronPdf_ChromeRenderingEngine”?
- javascript - 使用 setTimeout 函数悬停时出现两个下拉菜单的问题
- sas - 如何在数据集成工作室中乘以行?
- python - 如何从 ID 不存在的 pandas 数据框中查找记录?
- ruby - 成对平均分配数组,组合/排列问题
- asp.net-core - 授权策略失败时重定向到自定义错误页面