Por algum motivo, a maioria das respostas aqui não me ajudou (talvez esteja relacionado à minha imagem FROM no Dockerfile)
Então, eu preferi criar um bash script
em meu espaço de trabalho combinado com a --build-arg
fim de manipular a instrução if enquanto o Docker constrói verificando se o argumento está vazio ou não
Script 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 Build:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Observação: Isso irá para o else (false) no script bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Observação: Isso irá para o if (true)
Editar 1:
Depois de várias tentativas eu encontrei o seguinte artigo e este um
que me ajudou a entender 2 coisas:
1) ARG antes de FROM estar fora da construção
2) O shell padrão é / bin / sh, o que significa que if else está funcionando um pouco diferente na construção do docker. por exemplo, você precisa apenas de um "=" em vez de "==" para comparar strings.
Então você pode fazer isso dentro do Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
e no docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .