Angular应用Docker镜像构建正常但运行容器时shell脚本语法错误排查
排查思路
1. 修复脚本换行符问题
Windows环境编辑的脚本默认带CRLF换行符,而Linux容器仅识别LF格式,这会导致shell解析语法错误。可以通过两种方式解决:
- 在编辑器中将脚本换行符设置为LF(比如VS Code右下角切换)
- 在Dockerfile中添加转换步骤:
COPY ./docker/run.sh ./run.sh RUN apt-get update && apt-get install -y dos2unix && dos2unix run.sh
2. 修正for循环的语法写法
原脚本用$(ls ...)遍历文件存在空格兼容问题,且sh对该写法的支持不稳定,换成更可靠的glob遍历,同时给变量加双引号避免文件名含空格时出错:
for mainfile in /usr/share/nginx/html/main*.js; do envsubst '$HOST_NAME' < "$mainfile" > main.tmp; mv main.tmp "$mainfile"; done
3. 添加脚本shebang头
在run.sh开头指定解析shell,避免容器用错误的解释器执行:
#!/bin/sh # 后续脚本内容...
4. 确保脚本有执行权限
在Dockerfile中添加权限设置:
COPY ./docker/run.sh ./run.sh RUN chmod +x run.sh
5. 容器内交互式调试
启动临时容器进入终端,手动运行脚本定位具体错误:
docker run --rm -it --entrypoint sh [你的镜像名称] # 进入容器后执行 sh run.sh
内容的提问来源于stack exchange,提问作者Tim Gabrikowski
相关产品推荐
相关产品推荐

