Bazı nedenlerden dolayı buradaki yanıtların çoğu bana yardımcı olmadı (belki de Dockerfile'daki FROM resmimle ilgilidir)
Bu yüzden bir bash script
--build-arg
, Docker oluştururken bağımsız değişkenin boş olup olmadığını kontrol ederek if ifadesini işlemek için çalışma alanımda ile birleştirilmiş
Bash komut dosyası:
#!/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 Yapısı:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Açıklama: Bu, bash betiğindeki diğerine (yanlış) gidecek
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Açıklama: Bu, if (doğru)
Düzenleme 1:
Birkaç denemeden sonra aşağıdaki makaleyi buldum ve bu tane
2 şey anlamama yardım:
1) FROM'dan önceki ARG yapının dışında
2) Varsayılan kabuk / bin / sh'dir, bu, if else'in docker yapısında biraz farklı çalıştığı anlamına gelir. örneğin dizeleri karşılaştırmak için "==" yerine yalnızca bir "=" gerekir.
Böylece bunu içinde yapabilirsiniz Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
ve içinde docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .