为什么我不能在 Dockerfile 中的 FROM 之后再次使用构建参数?
Why can't I use the build arg again after FROM in a Dockerfile?
我正在使用 Docker 18.05.0~ce~3-0~ubuntu
并且我想将构建参数传递给 FROM 以及我的 Docker 文件中的其他行。您希望以下内容有效:
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
build arg?我没有找到任何此类限制的记录。
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, and a discussion on why documentation and build mechanics is a bit confusing on ARG usage is here: https://github.com/moby/moby/issues/34129
我正在使用 Docker 18.05.0~ce~3-0~ubuntu
并且我想将构建参数传递给 FROM 以及我的 Docker 文件中的其他行。您希望以下内容有效:
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
build arg?我没有找到任何此类限制的记录。
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, and a discussion on why documentation and build mechanics is a bit confusing on ARG usage is here: https://github.com/moby/moby/issues/34129