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

Dockerfile中CMD结合ARGS传参失败问题求助

解决Dockerfile中CMD使用环境变量的问题

问题根源

你用的是exec格式的CMD(数组形式),这种模式下Docker会直接执行指定命令,不会通过shell解析环境变量,所以$HOST_NAME会被当作字面量传递给/kvs,而非替换成实际的环境变量值。报错/bin/sh: [/kvs,: not found也是因为这种格式下变量未被正确解析,导致命令执行异常。

有效解决方案

有两种可行的写法:

方案1:使用shell格式的CMD(推荐)

直接写成非数组形式,让shell自动解析环境变量:

CMD /kvs -host $HOST_NAME

方案2:显式调用shell处理变量(保留exec格式)

如果需要用数组形式,要显式启动shell来解析变量:

CMD ["/bin/sh", "-c", "/kvs -host $HOST_NAME"]

为什么之前的写法无效

  • 所有数组形式的CMD写法(比如CMD ["/kvs", "-host", $HOST_NAME"])都不会解析环境变量,$HOST_NAME会被当作普通字符串传给/kvs
  • 加入echo的写法完全错误,数组中的每个元素都是命令的参数,/kvs会把"echo $HOST_NAME"当作-host的参数值,而非执行echo命令

验证ARG传递是否正常

你的ARG HOST + ENV HOST_NAME=$HOST设置是正确的,构建时只需通过docker build --build-arg HOST=你的主机地址 .就能将参数传递到容器的环境变量中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:30:53