我想在构建时间内传递变量,并在运行时以该参数启动脚本。我该怎么办?
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
答案 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 . )