По какой-то причине большинство ответов здесь мне не помогли (возможно, это связано с моим изображением FROM в Dockerfile)
Поэтому я предпочел создать bash script
в своей рабочей области в сочетании с --build-arg
, чтобы обрабатывать оператор if во время сборки Docker, проверяя, является ли аргумент пустым или нет
Сценарий Bash:
#!/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
Dockerfile:
FROM ...
....
ARG arg
COPY bash.sh /tmp/
RUN chmod u+x /tmp/bash.sh && /tmp/bash.sh $arg
....
Сборка Docker:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Примечание: это перейдет к else (false) в сценарии bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Замечание: это перейдет к if (true)
Изменить 1:
После нескольких попыток я нашел следующую статью , и этот один ,
который помог мне понять 2 вещи:
1) ARG перед FROM находится вне сборки
2) Оболочка по умолчанию - / bin / sh, что означает, что if else работает немного по-другому в сборке докеров. например, для сравнения строк вам нужен только один "=" вместо "==".
Так что вы можете сделать это внутри 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 .