Pour une raison quelconque, la plupart des réponses ici ne m'ont pas aidé (peut-être est-ce lié à mon image FROM 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 l'instruction if pendant la construction de Docker en vérifiant si l'argument est vide ou non
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
....
Construction de Docker:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Remarque: cela ira à l'autre (faux) dans le script bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Remarque: cela ira au if (true)
Modifier 1:
Après plusieurs essais, j'ai trouvé l' article suivant et celui- ci
qui m'a aidé à comprendre 2 choses:
1) ARG avant FROM est en dehors de la construction
2) Le shell par défaut est / bin / sh, ce qui signifie que if else fonctionne un peu différemment dans la construction du docker. par exemple, vous n'avez besoin que d'un seul "=" au lieu de "==" pour comparer les chaînes.
Vous pouvez donc le faire à l'intérieur du 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 le docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .