Dockerfile捕获命令的输出

时间:2018-11-13 19:26:46

标签: docker

我的Dockerfile中有以下行,该行应捕获主机的显示号:

RUN      DISPLAY_NUMBER="$(echo $DISPLAY | cut -d. -f1 | cut -d: -f2)" && echo $DISPLAY_NUMBER

当我尝试构建Dockerfile时,DISPLAY_NUMBER为空。但是,当我直接在终端中运行同一命令时,却看到了结果。我在这里做错什么了吗?

2 个答案:

答案 0 :(得分:1)

RUN指定的命令在生成映像时执行。构建期间没有显示,因此输出为空。

您可以将RUNENTRYPOINT交换,然后在docker启动时执行命令。

但是如何将主机显示内容转发到容器是另一回事。

答案 1 :(得分:1)

主机环境变量不能在构建期间传递,只能在运行时传递。

只能通过以下方式指定构建args:

第一个“声明arg”

ARG DISPLAY_NUMBER

然后运行 docker build . --no-cache -t disp --build-arg DISPLAY_NUMBER=$DISPLAY_NUMBER

您可以使用envsubst技巧来解决此问题

RUN      echo $DISPLAY_NUMBER

在命令行上:

envsubst < Dockerfile | docker build . -f -

这将重写内存中的Dockerfile,并在更改了环境变量的情况下将其传递给Docker。

编辑:请注意,此解决方案虽然毫无用处,因为您可能 希望无论如何都要在运行时执行此操作,因为该值不应该取决于映像的生成位置,而取决于映像的运行位置。

我个人会将该逻辑转移到您的ENTRYPOINTCMD脚本中。