Z jakiegoś powodu większość odpowiedzi mi nie pomogła (może jest to związane z moim obrazem FROM w pliku Dockerfile)
Więc wolałem utworzyć bash script
w moim obszarze roboczym w połączeniu z --build-arg
, aby obsłużyć instrukcję if podczas kompilacji Dockera, sprawdzając, czy argument jest pusty, czy nie
Skrypt 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
....
Kompilacja Dockera:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Uwaga: To przejdzie do else (false) w skrypcie bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Uwaga: to przejdzie do if (true)
Edycja 1:
Po kilku próbach znalazłem następujący artykuł i ten jeden
, który pomógł mi zrozumieć 2 rzeczy:
1) ARG przed FROM jest poza kompilacją
2) Domyślną powłoką jest / bin / sh, co oznacza, że if else działa nieco inaczej w kompilacji dockera. na przykład potrzebujesz tylko jednego „=” zamiast „==”, aby porównać ciągi.
Możesz więc to zrobić wewnątrz Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
aw docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .