欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

2025/2/8 21:12:11 来源:https://blog.csdn.net/ginkov/article/details/143145281  浏览:    关键词:Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

在一个大型的官方镜像中 ,我通过 docker history --no-trunc <image_id> 看到,该镜像某一步的构建过程是:

RUN |3 CUDA_VERSION=12.4.1.003 CUDA_DRIVER_VERSION=550.54.15 JETPACK_HOST_MOUNTS= /bin/sh -c if [ -n "${JETPACK_HOST_MOUNTS}" ]; then        echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf     && echo "/usr/lib/aarch64-linux-gnu/tegra-egl" >> /etc/ld.so.conf.d/nvidia-tegra.conf;  fi

这是一个很奇怪的写法,查了一下 Linux Shell 也没有以 “|” 开头的。
于是就去问了一下 Claude,其回答如下:

  1. 开头的 |3YAML pipe operator,带一个strip chomping indicator. 在 Dockerfile 中用它可以写多行命令。
  2. 接下来是设置环境变量:
    • CUDA_VERSION=12.4.1.003
    • CUDA_DRIVER_VERSION=550.54.15
    • JETPACK_HOST_MOUNTS= (empty value)
  3. 然后再使用 /bin/sh -c 执行以下判断脚本:
    if [ -n "${JETPACK_HOST_MOUNTS}" ]; thenecho "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf&& echo "/usr/lib/aarch64-linux-gnu/tegra-egl" >> /etc/ld.so.conf.d/nvidia-tegra.conf
    fi
    

它实际的作用是:

  • 检查是否 JETPACK_HOST_MOUNTS 变量是为非空 (-n)
  • 如果变量非空:
    1. 创建/覆盖 (>) /etc/ld.so.conf.d/nvidia-tegra.conf 文件,基于 /usr/lib/aarch64-linux-gnu/tegra 中的内容
    2. 添加 (>>) /usr/lib/aarch64-linux-gnu/tegra-egl 文件的内容到上面的 conf 文件。

|3 代表下方各行的缩进列数。|3 代表 “保留所有换行,并缩进三格”。

所以这里提到了一个概念:YAML pip opertor 及其 strip chomping indicator。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com