Per qualche motivo la maggior parte delle risposte qui non mi ha aiutato (forse è correlato alla mia immagine FROM nel Dockerfile)
Quindi ho preferito creare un bash script
nel mio spazio di lavoro combinato con --build-arg
per gestire l'istruzione if mentre Docker creava controllando se l'argomento è vuoto o meno
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
....
Build Docker:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Nota: questo andrà a else (false) nello script bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Nota: questo andrà al if (true)
Modifica 1:
Dopo diversi tentativi ho trovato il seguente articolo e questo uno
che mi ha aiutato a capire 2 cose:
1) ARG prima di FROM è al di fuori della build
2) La shell predefinita è / bin / sh, il che significa che if else funziona in modo leggermente diverso nella build docker. ad esempio è necessario un solo "=" invece di "==" per confrontare le stringhe.
Quindi puoi farlo all'interno del file 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 in docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .