WSL 2环境下Docker Buildx Bake构建FrankenPHP静态二进制文件时curl下载失败(错误码56:unexpected eof)
WSL 2环境下Docker Buildx Bake构建FrankenPHP静态二进制文件时curl下载失败(错误码56:unexpected eof)
我之前也碰到过类似的WSL2网络相关的curl SSL错误,给你几个针对性的排查和解决思路,应该能帮你搞定这个问题:
1. 检查并清理WSL2的代理配置
有时候Windows的代理会自动渗透到WSL2环境中,但配置不完整会导致SSL握手异常。
- 先在WSL终端里执行以下命令,查看当前是否有自动设置的代理:
echo $HTTP_PROXY $HTTPS_PROXY - 如果输出了代理地址,先临时取消代理再测试:
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy - 之后直接在WSL里跑一遍curl下载命令,看看能不能成功。如果平时需要用代理,记得要配置WSL2能访问的Windows局域网IP(比如
192.168.x.x:7890),不能直接用localhost,因为WSL2的localhost和Windows的不是同一网络栈。
2. 重置WSL2的网络栈
WSL2的网络偶尔会出现一些莫名其妙的连接问题,重置网络栈往往能快速解决:
- 先在WSL终端或者Windows的PowerShell/CMD里执行
wsl --shutdown,彻底关闭WSL2环境; - 等待10秒左右,重新打开WSL终端,启动Docker服务,再尝试执行构建命令。
3. 临时替换下载方式(应急方案)
这个错误也可能是OpenSSL版本兼容性导致的,你可以先绕过严格的SSL验证完成下载(仅限测试场景,生产环境不建议长期使用):
- 换成wget命令尝试下载:
wget -O spc https://d1.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64 --no-check-certificate - 或者用curl关闭SSL验证:
curl -o spc -fsSL --insecure https://d1.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64 - 如果这种方式能成功下载,你可以把本地下载好的
spc文件放到Docker构建上下文目录里,修改Dockerfile中的下载步骤,直接用COPY ./spc /path/to/spc替换原来的curl命令,绕开在线下载的问题。
4. 修复WSL2的DNS配置
DNS解析异常也可能导致这种SSL连接被意外截断的错误,我们可以手动指定公共DNS:
- 先修改WSL2的
resolv.conf文件:sudo sed -i 's/nameserver.*/nameserver 8.8.8.8/' /etc/resolv.conf - 注意WSL2默认会自动覆盖这个文件,如果你改完后又恢复成原来的配置,可以创建
/etc/wsl.conf文件并添加以下内容,固定DNS配置:[network] generateResolvConf = false - 保存后执行
wsl --shutdown重启WSL2,配置就会生效。
5. 离线下载后传入WSL环境
如果Windows端浏览器能正常下载这个文件的话,还可以用这个离线方案:
- 先在Windows浏览器里下载好
spc-linux-x86_64文件; - 在WSL终端里执行类似的命令,把文件从Windows目录传到WSL中(替换成你的实际下载路径):
cp /mnt/c/Users/你的用户名/Downloads/spc-linux-x86_64 ./spc - 之后修改Dockerfile,用本地的
spc文件替代在线下载步骤即可。
建议你按从1到5的顺序尝试,前两个方案是最常见的解决思路,大概率能帮你解决问题。如果还是不行,再尝试后面的应急方案。




