错误:Dockerfile中shell脚本的意外文件结束(期望“do”)

时间:2017-06-05 18:51:06

标签: shell docker

我不希望有另一个带脚本的.sh文件,并且要在Dockerfile中及时添加shell脚本代码。但是,我在图像构建期间收到错误消息:

/ bin / sh:语法错误:意外的文件结束(期待“do”)

以下是带有脚本的Dockerfile部分:

RUN cat .env | while [ read LINE ] \
do \
    envName=$(echo "$LINE" | grep -o "^[^\=]*") \
    echo "PassEnv $envName" >> httpd.conf \
done

任何想法有什么不对?

3 个答案:

答案 0 :(得分:3)

删除方括号[],并在行尾使用;,因为docker在看到\时会加入行,因此命令会融化。

这对我有用:

RUN cat .env | while read LINE ;\
    do \
      envName=$(echo "$LINE" | grep -o "^[^\=]*"); \
      echo "PassEnv $envName" >> httpd.conf ;\
    done

答案 1 :(得分:1)

当我忘记确保在Windows上创建并向Linux容器复制COPYd的文件具有LF(而不是CRLF)行结尾时,出现了此问题。 将文件转换为LF行尾有效

答案 2 :(得分:0)

while构造要求do位于单独的一行(或者,以分号后出现)。所以你可能想要:

RUN cat .env | while [ read LINE ]; \
do \
    envName=$(echo "$LINE" | grep -o "^[^\=]*") \
    echo "PassEnv $envName" >> httpd.conf \
done

注意第一行的分号。