【问题标题】:Pass arg to docker build将 arg 传递给 docker build
【发布时间】:2019-12-30 20:21:38
【问题描述】:

我想在 构建时间 期间传递一个变量,并在运行时使用此参数启动脚本。我该怎么做?

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

【问题讨论】:

  • 尝试使用CMD echo $var
  • 很好奇,因为它在我的机器上运行良好......我们的 Dockerfile 之间有 2 个不同之处:ENV var=$varCMD echo $var

标签: docker docker-build


【解决方案1】:

注意:与 shell 形式不同,exec 形式不调用命令 贝壳。这意味着不会发生正常的外壳处理。为了 例如, CMD [ "echo", "$HOME" ] 不会在 $家。如果你想要外壳处理,那么要么使用外壳形式,要么 直接执行一个shell,例如: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 . ) 

源代码:https://docs.docker.com/engine/reference/builder/#cmd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 2021-07-28
    • 2018-11-27
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多