Aus irgendeinem Grund haben mir die meisten Antworten hier nicht geholfen (vielleicht hängt es mit meinem FROM-Image in der Docker-Datei zusammen)
Daher habe ich es vorgezogen, bash script
in meinem Arbeitsbereich eine Kombination mit zu erstellen --build-arg
, um die if-Anweisung während der Docker-Erstellung zu verarbeiten, indem überprüft wird, ob das Argument leer ist oder nicht
Bash-Skript:
#!/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" .
Anmerkung: Dies geht zu else (false) im Bash-Skript
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Bemerkung: Dies geht an das if (true)
Bearbeiten 1:
Nach mehreren Versuchen habe ich folgendes gefunden Artikel und dieses ein
der mir geholfen hat, zwei Dinge zu verstehen:
1) ARG vor FROM befindet sich außerhalb des Builds
2) Die Standard-Shell ist / bin / sh, was bedeutet, dass if if im Docker-Build etwas anders funktioniert. Zum Beispiel benötigen Sie nur ein "=" anstelle von "==", um Zeichenfolgen zu vergleichen.
Sie können dies also in der Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
und in der docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .