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

Windows环境下Docker容器内执行.sh脚本异常,同命令直接运行正常

问题排查与解决方案

根因定位

该问题核心是Windows与Linux类系统的换行符格式不兼容:
你在Windows 10环境下创建的.sh脚本默认使用CRLF(\r\n)作为换行符,而Docker容器内的Linux环境仅识别LF(\n)换行符。脚本末尾多余的\r回车符会被识别为命令参数的一部分,导致Django实际接收到的应用名称为authentication\r,无法匹配到已注册的应用。你看到的截断式异常输出,就是因为\r会让光标回到行首,后续输出内容覆盖了前面的完整报错信息,原始完整报错应为No installed app with label 'authentication\r'。

排查步骤

  • 验证换行符问题
    在容器内执行命令:cat -A ./migration_script.sh,如果输出的行尾显示^M$,即可确认是换行符格式问题。

修复方案

单次临时修复

直接在容器内转换脚本格式即可:

  1. 安装dos2unix工具(Debian/Ubuntu系容器):apt update && apt install -y dos2unix
  2. 执行格式转换:dos2unix ./migration_script.sh
  3. 重新运行脚本即可正常执行。

永久规避方案

  • Git仓库配置:在Windows端执行git config --global core.autocrlf true,配置Git提交代码时自动将CRLF转为LF,拉取到本地时自动转回CRLF;也可以在项目根目录新增.gitattributes文件,指定所有.sh文件强制使用LF换行符。
  • 编辑器配置:使用VS Code、Notepad++等编辑器编写Shell脚本时,手动将右下角的换行符格式从CRLF修改为LF后再保存。
  • 镜像构建配置:在Dockerfile中新增批量转换脚本格式的步骤,构建镜像时自动将所有.sh文件转为LF格式,避免每次手动处理。

内容的提问来源于stack exchange,提问作者SAIF AHMED ANIK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:24:03