You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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的顺序尝试,前两个方案是最常见的解决思路,大概率能帮你解决问题。如果还是不行,再尝试后面的应急方案。

火山引擎 最新活动