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


193

Згідно з документацією , можна визначити кілька аргументів для прапора --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", число_of_replicas = 2 "

Будь-яка ідея, як я можу визначити кілька аргументів?

Відповіді:


358

Використовувати --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 .

63
Дякуємо, що очистили це. --helpНа це особливо в оману: --build-arg list. Це не список!
ковбасник

91

Вищенаведена відповідь 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

Я стикався з цією проблемою, тож сподіваюся, що допоможу комусь (собі) у майбутньому.


6
Ви мені теж допомогли, тож дякую. Дозвольте додати лише те, що ARGSпотрібно оголосити післяFROM
Едоардо

6
Нічого дякую! Використання ARGнавіть не згадується в docs.docker.com/engine/reference/commandline/build/… і --build-argбуло для мене марним без цьогоARG
HeyWatchЦе

19

Якщо ви хочете використовувати змінну середовища під час збирання. Скажімо, встановлення імені користувача та пароля.

username= Ubuntu
password= swed24sw

Докерфайл

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


3
Слідкуйте за тим, щоб це залишало секретні значення, видимі на зображенні докера за допомогою docker historyкоманди.
Гері

іноді єдиний верхній варіант відповіді! але ти це дуже добре пояснив Дякую!
Дапіндер Сінгх

14

Прикро, що нам також потрібно кілька ARG, це призводить до декількох шарів і сповільнює збірку через це, і для тих, хто також цікавиться, що в даний час немає способу встановити кілька ARG.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.