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.