由于某种原因,这里的大多数答案都对我没有帮助(也许与Dockerfile中的FROM映像有关)
所以我更喜欢bash script
在我的工作空间中创建一个,--build-arg
以便在Docker构建时通过检查参数是否为空来处理if语句
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)默认shell是/ bin / sh,这意味着if else在docker构建中的工作方式略有不同。例如,您只需要一个“ =”而不是“ ==”来比较字符串。
因此,您可以在 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 .