使用Dockerfile Here Document报错:/bin/sh: 1: set: Illegal option -
解决Docker Here Document执行报错的方案
错误原因
报错/bin/sh: 1: set: Illegal option -是因为Ubuntu镜像默认shell为dash,当Here Document中的命令带有前导空格时,dash解析出现异常;另外dash与bash的set选项兼容细节存在差异,也可能触发这类错误。
可行解决方案
1. 移除Here Document内容的前导空格
直接去掉set -eux前面的空格,确保命令被shell正确解析:
# syntax=docker/dockerfile:1.3-labs FROM ubuntu:focal RUN <<EOF set -eux EOF
2. 显式指定使用bash执行
强制用bash替代默认的dash,bash对命令格式的兼容性更好:
# syntax=docker/dockerfile:1.3-labs FROM ubuntu:focal RUN bash <<EOF set -eux EOF
3. 使用<<-EOF并改用tab缩进
<<-EOF会自动忽略内容前的tab字符(注意必须是tab,不能是空格),既保留代码缩进美观,又不会传递多余空格给shell:
# syntax=docker/dockerfile:1.3-labs FROM ubuntu:focal RUN <<-EOF set -eux EOF
内容的提问来源于stack exchange,提问作者Yamada JP
相关产品推荐
相关产品推荐

