Dari beberapa alasan sebagian besar jawaban di sini tidak membantu saya (mungkin ini terkait dengan gambar FROM saya di Dockerfile)
Jadi saya lebih suka membuat bash script
di ruang kerja saya dikombinasikan dengan --build-arg
untuk menangani pernyataan if sementara Docker membangun dengan memeriksa apakah argumennya kosong atau tidak
Skrip 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
....
Docker Build:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Catatan: Ini akan menuju ke else (false) di skrip bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Catatan: Ini akan pergi ke if (true)
Edit 1:
Setelah beberapa kali saya telah menemukan berikut artikel dan ini salah satu
yang membantu saya untuk memahami 2 hal:
1) ARG before FROM berada di luar build
2) Shell default adalah / bin / sh yang berarti if else berfungsi sedikit berbeda dalam build buruh pelabuhan. misalnya Anda hanya perlu satu "=" daripada "==" untuk membandingkan string.
Jadi, Anda dapat melakukan ini di dalam Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
dan di docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .