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.