어떤 이유로 여기에있는 대부분의 답변이 도움이되지 않았습니다 (Dockerfile의 내 FROM 이미지와 관련이있을 수 있습니다)
그래서 Docker가 인수가 비어 있는지 여부를 확인하여 빌드하는 동안 if 문을 처리하기 위해 bash script
내 작업 공간에서 를 만드는 것을 선호했습니다.--build-arg
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 빌드 :
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
비고 : 이것은 bash 스크립트의 else (false)로 이동합니다.
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
비고 : 이것은 if (true)로 이동합니다.
편집 1 :
몇 번을 시도해 후 나는 다음과 같은 발견 글 이 한
두 가지를 이해하는 나에게 도움이 :
1) FROM 이전의 ARG는 빌드 외부에 있습니다.
2) 기본 셸은 / bin / sh입니다. 즉, if else가 도커 빌드에서 약간 다르게 작동 함을 의미합니다. 예를 들어 문자열을 비교하려면 "=="대신 "="하나만 필요합니다.
그래서 당신은 내부에서 이것을 할 수 있습니다 Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
그리고 docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .