代码之家  ›  专栏  ›  技术社区  ›  joesan

Dockerfile捕获命令的输出

  •  0
  • joesan  · 技术社区  · 6 年前

    我的Dockerfile中有以下行,用于捕获主机的显示编号:

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

    当我试图构建Dockerfile时,DISPLAY\u NUMBER为空。但是,当我在终端中直接运行相同的命令时,我得到了一个结果。有什么我做错的吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Uku Loskit    6 年前

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

    第一个“声明参数”

    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。

    无论如何,您希望在运行时执行此操作,因为此值不应取决于映像的构建位置,而应取决于映像的运行位置。

    我个人会把这个逻辑放到你的 ENTRYPOINT CMD 剧本

        2
  •  2
  •   mbuechmann    6 年前

    RUN

    你可以交换 ENTRYPOINT

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