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

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配置文件:
    1. 在WSL中执行 sudo nano /etc/wsl.conf
    2. 添加以下内容:
      [automount]
      enabled = true
      options = "metadata,umask=22,fmask=11"
      mountFsTab = false
      
    3. 保存后执行 wsl --shutdown 重启WSL,再重新尝试构建

5. 文件名含特殊字符或编码异常

  • 在WSL终端执行 ls -b build_*.sh,查看文件名是否包含不可见转义字符(比如build_\012.sh这类)
  • 对比另一台正常设备的ls -l输出,确认文件名完全一致,排除本地克隆时的编码转换问题

快速验证步骤

先在WSL终端的项目根目录手动执行找不到的脚本,比如./build_libpng.sh:

  • 如果手动执行也提示找不到文件:说明文件确实不存在或路径/文件名有问题,按上述1-5排查
  • 如果手动执行能正常运行:检查Dockerfile中的工作目录设置(WORKDIR指令),确保构建时的工作目录与手动执行的目录一致

内容的提问来源于stack exchange,提问作者EugeneSalmin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:03:09