Почему я не могу снова использовать arg сборки после FROM в Dockerfile? - PullRequest
0 голосов
/ 11 мая 2018

Я использую 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.в списке не удалось скопировать файлы: не удалось скопировать каталог: mkdir /var/lib/docker/overlay2/0536b4e280ddca2fec18db9d79fa625a8be86efdbaaea5b3dbbefcdaaab3f669/merged/etc/apt/sources.list: не каталог

* *1011*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_IMAGE дважды, в строке и после строки FROM?Я не могу найти никаких задокументированных ограничений такого рода.

1 Ответ

0 голосов
/ 11 мая 2018

Почему я не могу использовать arg сборки FROM_IMAGE дважды, в строке и после строки FROM?

Существует реальная разница в зависимости от того, куда вы положили ARG, относящуюся к строке FROM:

  • любой ARG перед первым FROM можно использовать в любой строке FROM
  • любой ARG на этапе сборки (после FROM) можно использовать на этом этапе сборки

Это связано с механикой этапов сборки, и некоторые ссылки на фактическое поведение можно найти здесь: https://github.com/docker/cli/pull/333,, а обсуждение того, почему документация и механика сборки немного сбивают с толку использование ARG, находится здесь: https://github.com/moby/moby/issues/34129

...