docker build с --build-arg с несколькими аргументами


206

Согласно документации , для флага можно определить несколько аргументов --build-arg, но я не могу понять, как это сделать. Я пробовал следующее:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 number_of_replicas=2 --no-cache .

=> Это возвращает ошибку.

Я также пробовал:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5,number_of_replicas=2 --no-cache .

=> Это устанавливает одну переменную, number_of_shardsв значение "5, число_реплик = 2"

Есть идеи, как я могу определить несколько аргументов?

Ответы:


389

Используйте --build-argс каждым аргументом.

Если вы передаете два аргумента, добавьте --build-argкаждый аргумент, например:

docker build \
-t essearch/ess-elasticsearch:1.7.6 \
--build-arg number_of_shards=5 \
--build-arg number_of_replicas=2 \
--no-cache .

67
Спасибо, что прояснили это. --helpНа это особенно в заблуждение: --build-arg list. Это не список!
— cowlinator

100

Приведенный выше ответ pl_rock верен, единственное, что я хотел бы добавить, - это ожидать, что ARG будет внутри Dockerfile, если у вас не будет доступа к нему. Итак, если вы делаете

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

Затем внутри Dockerfile вы должны добавить

ARG number_of_replicas
ARG number_of_shards

Я столкнулся с этой проблемой, поэтому надеюсь, что помогу кому-то (себе) в будущем.


7
Вы мне тоже помогли, так что спасибо. Позвольте мне добавить только то, что ARGSдолжно быть объявлено послеFROM
— Эдоардо

7
Вау, спасибо! Использование ARGдаже не упоминается в docs.docker.com/engine/reference/commandline/build/… и --build-argбыло бесполезно для меня безARG
— HeyWatchThis

22

Если вы хотите использовать переменную среды во время сборки. Допустим, установка имени пользователя и пароля.

username= Ubuntu
password= swed24sw

Dockerfile

FROM ubuntu:16.04
ARG SMB_PASS
ARG SMB_USER
# Creates a new User
RUN useradd -ms /bin/bash $SMB_USER
# Enters the password twice.
RUN echo "$SMB_PASS\n$SMB_PASS" | smbpasswd -a $SMB_USER

Терминальная команда

docker build --build-arg SMB_PASS=swed24sw --build-arg SMB_USER=Ubuntu . -t IMAGE_TAG


7
Помните, что при этом секретные значения остаются видимыми в образе докера с помощью docker historyкоманды.
— Gary

иногда за лучший ответ получают только один голос! но вы очень хорошо это объяснили. Спасибо!
— Дюпиндер Сингх

13

Жалко, что нам тоже нужно несколько ARG, это приводит к нескольким уровням и из-за этого замедляет сборку, и для тех, кто также задается вопросом, в настоящее время нет возможности установить несколько ARG.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.