编译Dockerfile时出现“Illegal option”错误该如何解决?
Docker构建调用download.sh报错的修复方案
错误根因
你遇到的/bin/sh: illegal option -报错核心原因有两类:
- Alpine系统默认使用
ash作为默认shell,而你使用的download.sh是针对bash编写的脚本,两种shell的语法解析规则存在差异,直接执行时ash无法正确解析脚本内容。 - 如果你是在Windows环境下保存的
download.sh文件,脚本换行符会被自动转换为CRLF格式,Linux下的shell解析时会把换行符前的\r识别为非法字符,触发报错。
修复方案
- 最简修改方案:直接修改Dockerfile中调用脚本的指令,显式指定用bash执行即可,你已经在builder阶段安装了bash依赖,无需额外安装其他包:
把原Dockerfile中的
替换为RUN /tmp/download.shRUN bash /tmp/download.sh - 如果是Windows环境下存储的脚本,需要先将
download.sh的换行符格式从CRLF修改为Linux标准的LF格式,再执行构建,主流代码编辑器都支持直接切换换行符格式。 - 可选补充:如果修改后仍有权限类报错,可以在COPY脚本的指令后增加一行赋权操作:
RUN chmod +x /tmp/*.sh
验证
修改完成后重新执行构建命令即可正常执行脚本下载依赖:
docker build . -t servicecamundadocker/latest
内容的提问来源于stack exchange,提问作者Henrique Mauri
相关产品推荐
相关产品推荐

