将arg传递给docker build

时间:2019-08-26 16:04:58

标签: docker docker-build

我想在构建时间内传递变量,并在运行时以该参数启动脚本。我该怎么办?

Dockerfile

FROM alpine
ARG var
# ENV var=${var} # doesn't work
CMD ["echo", "${var}"]
# ENTRYPOINT ["echo", "$var"] # doesn't work
# ENTRYPOINT "echo" "$var" # doesn't work

运行:

docker run -t $(docker build  --build-arg  var=hello -q .) 

产生:

$var

1 个答案:

答案 0 :(得分:2)

  

注意:与shell窗体不同,exec窗体不会调用命令   贝壳。这意味着正常的外壳处理不会发生。对于   例如,CMD [“ echo”,“ $ HOME”]不会在   $ HOME。如果要进行外壳处理,请使用外壳形式或   直接执行外壳程序,例如:CMD [“ sh”,“-c”,“ echo $ HOME”   ]。当使用exec表单并直接执行shell时,如   外壳形式的情况,就是外壳在做环境   变量扩展,而不是docker。

换句话说,正确的Dockerfile将是:

FROM alpine
ARG var
ENV var $var
CMD echo $var

为了正确地构建它,您应该运行:

docker run -t $( docker build --build-arg=var=hello -q . ) 

src:https://docs.docker.com/engine/reference/builder/#cmd