Я хочу использовать вывод консоли в качестве имени моего базового образа докера.
В частности, у меня есть цепочка зависимых файлов сборки Docker, поэтому я пытаюсь автоматизировать этот процесс.Так, например, Dockerfile одного изображения derived1
зависит от базового изображения base_image_name
в следующем сценарии:
base_image_name/
Dockerfile
derived1/
Dockerfile
derived2/
Dockerfile
Когда создается базовое изображение, оно берет свое имя из текущей папки с помощью${PWD##*/}
.В этом случае папка базового изображения называется base_image_name
, поэтому базовое изображение называется company:base_image_name
.
Затем, когда создаются производные изображения, они должны просто иметь возможность определить имя базового изображения, перемещаясь вверх по каталогу и просматривая имя этих каталогов.Так, например, при сборке образа company:derived1
он должен искать один каталог, видеть, что он называется base_image_name
, и из этого следует, что он должен использовать базовый образ company:base_image_name
.
Мне бы хотелось, чтобы эта структура была глубиной в несколько слоев, поэтому я хочу автоматизировать ее.Чтобы сделать это, я попробовал несколько вариантов синтаксиса
FROM company:$(cd $PWD/../; echo ${PWD##*/})
, но я не могу понять, что это правильно.Чтобы понять, что делает команда $(cd $PWD/../; echo ${PWD##*/})
, просто введите ее в свой терминал.
echo $(cd $PWD/../; echo ${PWD##*/})
просто возвращает имя каталога на один уровень выше.Однако, когда я пытаюсь использовать это в Dockerfile, я получаю сообщение об ошибке
Error response from daemon: Dockerfile parse error line 1: FROM requires either one or three arguments
Может ли кто-нибудь предоставить мне правильный синтаксис?
РЕДАКТИРОВАТЬ:
Iтакже попытался создать производные изображения с build-arg
, но это тоже не сработало:
build.sh:
BASE=$(cd $PWD/../../; echo ${PWD##*/})
echo "BASE="$BASE
docker build --build-arg BASE=${BASE} -t company:"${PWD##*/}" .
, где Dockerfile выглядит как
FROM company:$BASE
В частности, это приводит кошибка сборки:
BASE=base_image_name
Sending build context to Docker daemon 5.12kB
Step 1/3 : FROM company:$BASE
invalid reference format
Таким образом, похоже, что докер неправильно интерпретирует этот аргумент сборки.