You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:22:38