Docker构建时部分.sh文件找不到,仅单台Win11设备报错
问题排查方案
以下是针对你遇到的Docker构建时部分build_*.sh脚本找不到的问题,结合Win11+WSL2+Docker Desktop环境的常见原因及排查步骤:
1. 文件名大小写不匹配
Windows默认文件系统大小写不敏感,但WSL2和Linux容器是大小写敏感的,这是最常见的原因:
- 直接在WSL终端的项目根目录执行
ls -l build_*.sh,检查所有脚本文件是否存在,且文件名大小写与Dockerfile中调用的完全一致(比如Dockerfile写的是RUN ./build_libjpeg.sh,但本地文件是Build_Libjpeg.sh) - 检查Git配置:执行
git config core.ignorecase,如果返回true,说明你的Git会忽略大小写,可能导致克隆时文件名与仓库不一致。可以执行git config --global core.ignorecase false后,重新克隆仓库验证。
2. 本地仓库文件不完整
- 执行
git status查看是否有文件缺失、未提交的删除操作,或者本地.gitignore规则过滤了相关脚本 - 强制同步仓库:执行
git fetch && git reset --hard origin/<你的分支名>,覆盖本地修改,确保所有文件与远程仓库一致 - 如果项目包含子模块,执行
git submodule update --init --recursive,拉取所有子模块的内容(部分依赖脚本可能放在子模块中)
3. Docker构建上下文或路径问题
- 确认执行
docker build的目录是项目根目录,和另一台正常设备的执行路径完全一致(不要在项目的子目录下执行构建) - 检查项目所在的Windows路径是否包含空格或特殊字符(比如
D:\My Lambda Projects\),这类路径在WSL挂载时可能出现解析异常,建议将项目移到无空格的路径(比如D:\lambda-imagemagick\)
4. WSL2挂载配置问题
WSL2挂载Windows目录时的元数据设置可能导致文件识别异常:
- 在WSL终端执行
mount | grep /mnt/<你的盘符>(比如/mnt/d),查看挂载选项中是否包含metadata - 如果没有
metadata选项,编辑WSL配置文件:- 在WSL中执行
sudo nano /etc/wsl.conf - 添加以下内容:
[automount] enabled = true options = "metadata,umask=22,fmask=11" mountFsTab = false - 保存后执行
wsl --shutdown重启WSL,再重新尝试构建
- 在WSL中执行
5. 文件名含特殊字符或编码异常
- 在WSL终端执行
ls -b build_*.sh,查看文件名是否包含不可见转义字符(比如build_\012.sh这类) - 对比另一台正常设备的
ls -l输出,确认文件名完全一致,排除本地克隆时的编码转换问题
快速验证步骤
先在WSL终端的项目根目录手动执行找不到的脚本,比如./build_libpng.sh:
- 如果手动执行也提示找不到文件:说明文件确实不存在或路径/文件名有问题,按上述1-5排查
- 如果手动执行能正常运行:检查Dockerfile中的工作目录设置(
WORKDIR指令),确保构建时的工作目录与手动执行的目录一致
内容的提问来源于stack exchange,提问作者EugeneSalmin
相关产品推荐
相关产品推荐

