Por alguna razón, la mayoría de las respuestas aquí no me ayudaron (tal vez esté relacionado con mi imagen FROM en el Dockerfile)
Así que preferí crear un bash script
en mi espacio de trabajo combinado con --build-arg
para manejar la declaración if mientras Docker compila verificando si el argumento está vacío o no
Guión 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
....
Compilación de Docker:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Observación: esto irá al else (falso) en el script bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Observación: esto irá al if (verdadero)
Edición 1:
Después de varios intentos he encontrado el siguiente artículo y esto uno
que me ayudó a entender 2 cosas:
1) ARG antes de FROM está fuera de la compilación
2) El shell predeterminado es / bin / sh, lo que significa que if else está funcionando un poco diferente en la compilación de la ventana acoplable. por ejemplo, solo necesita un "=" en lugar de "==" para comparar cadenas.
Entonces puedes hacer esto dentro del Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
y en el docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .