You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile中RUN指令shell形式转exec形式的正确写法咨询

Docker RUN指令Shell转Exec形式的正确写法

问题背景

原Shell形式的RUN指令:

RUN echo `uname -rv` > $HOME/kernel-info

尝试的Exec形式写法触发错误:cat: can't open '/root/kernel-info': No such file or directory,错误写法如下:

RUN ["echo","uname", "-rv", ">", "$HOME","/kernel-info" ]

错误原因

Exec模式的RUN指令不会调用Shell,因此无法解析命令替换(uname -rv)、环境变量($HOME)和重定向符号(>)这些Shell专属特性。你写的指令相当于让echo直接输出uname、-rv、>、$HOME、/kernel-info这些字符串,完全没有执行预期的逻辑。

正确的Exec形式写法

要实现和原Shell指令相同的功能,必须显式调用Shell来执行整个命令:

RUN ["/bin/sh", "-c", "echo `uname -rv` > $HOME/kernel-info"]

如果偏好更易读的命令替换语法,也可以写成:

RUN ["/bin/sh", "-c", "echo $(uname -rv) > $HOME/kernel-info"]

这种写法通过/bin/sh -c启动Shell,让Shell来解析命令里的替换、变量和重定向逻辑,和原Shell形式的RUN指令效果完全一致。

内容的提问来源于stack exchange,提问作者Shyam Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:00:34