Depuis quelques raison que la plupart des réponses ici ne m'aide pas (peut-être que c'est lié à mon image dans le Dockerfile)
J'ai donc préféré créer un bash script
dans mon espace de travail combiné avec --build-arg
afin de gérer si l'instruction tandis que le Panneau de construire en vérifiant si l'argument est vide ou pas
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
....
Le Panneau De Construction:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Remarque: il ira à l'autre (false) dans le script bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Remarque: il ira à la si (vrai)
Edit 1:
Après plusieurs essais j'ai trouvé la suite de l'article et de cette un
ce qui m'a aidé à comprendre 2 choses:
1) ARG avant à PARTIR de l'extérieur de la construire
2) Le shell par défaut est /bin/sh qui signifie que si le reste est de travailler un peu différente dans le menu fixe construire. par exemple, vous avez seulement besoin d'un "=" au lieu de "==" pour comparer des chaînes de caractères.
De sorte que vous pouvez le faire à l'intérieur de l' Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
et dans l' docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .