Docker容器在Windows Powershell运行失败但WSL2正常的问题排查
问题排查与解决
核心原因:换行符格式差异
Windows默认使用CRLF(回车+换行)作为文本文件的换行符,而Linux容器内的Shell脚本要求必须用LF(仅换行)格式。当你在Windows环境克隆代码时,Git默认会自动将仓库里的LF换行符转换为CRLF,导致容器内执行/start_reload.sh时,系统会把CR字符当成命令路径的一部分,最终抛出“找不到文件”的错误——本质是脚本解释器无法识别带CR的脚本内容。
具体解决步骤
1. 临时修复当前代码目录
在Windows PowerShell中进入代码根目录,执行以下命令强制Git保留仓库原有的LF换行符:
git config core.autocrlf false git rm --cached -r . git reset --hard
执行后重新构建镜像即可。
2. 永久配置避免后续问题
全局设置Git,让它对所有仓库的文本文件采用“拉取不转换、提交转LF”的规则,兼顾Windows编辑和Linux容器需求:
git config --global core.autocrlf input
3. Dockerfile层面加固(可选)
如果想从构建环节彻底规避这个问题,可以在Dockerfile中添加换行符转换步骤(以Debian/Ubuntu系镜像为例):
# 安装换行符转换工具 RUN apt-get update && apt-get install -y dos2unix && rm -rf /var/lib/apt/lists/* # 复制脚本后转换为LF格式,并赋予执行权限 COPY start_reload.sh /start_reload.sh RUN dos2unix /start_reload.sh && chmod +x /start_reload.sh
4. 确认脚本执行权限
额外检查Dockerfile是否给了脚本执行权限,缺少权限也可能触发类似错误:
RUN chmod +x /start_reload.sh
内容的提问来源于stack exchange,提问作者MadDanWithABox
相关产品推荐
相关产品推荐

