我不希望有另一个带脚本的.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
任何想法有什么不对?
答案 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
注意第一行的分号。