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

Windows Dockerfile中Git Bash作为SHELL时命令参数失效问题求助

解决Git Bash在Dockerfile中RUN命令参数失效的问题

问题根源

当你将Docker的SHELL配置为["bash", "-euo", "pipefail", "-c"]时,执行RUN ls -l会被Docker解析为:

bash -euo pipefail -c ls -l

而bash的-c选项仅会将紧随其后的第一个参数(这里是ls)作为要执行的命令字符串,后续的-l会被当作bash自身的位置参数(而非传给ls),因此实际只执行了无参数的ls。

解决方案

方法1:通过cmd.exe包裹传递完整命令字符串

修改Dockerfile中的SHELL配置为:

SHELL ["cmd.exe", "/S", "/C", "bash", "-euo", "pipefail", "-c"]

cmd.exe的/S /C参数会将后续的整个命令行(比如ls -l)合并为单个字符串传递给bash的-c选项,最终执行的命令等价于:

bash -euo pipefail -c "ls -l"

这样-l参数就能正确被ls识别,且你依然可以使用无引号的RUN ls -l写法。

方法2:使用自定义脚本合并参数

  1. 创建一个名为run_bash.sh的脚本,内容如下:
#!/bin/bash
exec bash -euo pipefail -c "$*"
  1. 在Dockerfile中添加以下内容:
COPY run_bash.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/run_bash.sh
SHELL ["run_bash.sh"]

之后执行RUN ls -l时,脚本会将所有参数合并为单个字符串传给bash的-c选项,确保参数正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:11:08