Чомусь більшість відповідей тут мені не допомогли (можливо, це пов’язано з моїм зображенням ВІД в Dockerfile)
Тому я вважав за краще створити bash script
у своїй робочій області в поєднанні з --build-arg
тим, щоб обробляти, якщо оператор, поки Docker будує, перевіряючи, чи аргумент порожній чи ні
Баш сценарій:
#!/bin/bash -x
if test -z $1 ; then
echo "The arg is empty"
....do something....
else
echo "The arg is not empty: $1"
....do something else....
fi
Докерфайл:
FROM ...
....
ARG arg
COPY bash.sh /tmp/
RUN chmod u+x /tmp/bash.sh && /tmp/bash.sh $arg
....
Докер збірка:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Зауваження: Це перейде до іншого (false) в скрипті bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Зауваження: це перейде до параметра if (true)
Редагувати 1:
Після декількох спроб я знайшов наступну статтю , і цей один ,
який допоміг мені зрозуміти 2 речі:
1) ARG перед FROM знаходиться поза складанням
2) Оболонка за замовчуванням - / bin / sh, що означає, що if if працює трохи іншим чином у складанні докера. наприклад, вам потрібно лише один "=" замість "==" для порівняння рядків.
Таким чином, ви можете зробити це всередині Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
і в docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .