PHP升级至8.2.6后Laravel调用Minio S3报cURL 56连接重置错误
PHP 8.2.6 + Laravel + Minio 连接重置(cURL error 56)问题解决指南
核心排查方向及修复方案:
修正Docker容器间的访问地址
如果Laravel和Minio都运行在Docker容器中,绝对不能用localhost:9000作为Minio地址——容器内的localhost指向自身,而非宿主机。改成Minio容器的名称(比如minio)或者自定义Docker网络中的服务名,将.env里的AWS_ENDPOINT设为http://minio:9000即可。调整PHP/cURL版本兼容性
PHP 8.2.6与部分cURL版本存在适配bug,会导致连接重置:- 临时降级PHP到8.2.5测试,确认是否为8.2.6的特定问题
- 更换PHP基础镜像,比如使用
php:8.2.6-fpm-bullseye,其内置的cURL版本更稳定 - 手动升级容器内的cURL到最新稳定版
开启Minio的S3兼容模式
在Minio启动命令中添加--compat参数,强制兼容旧版S3 API。Laravel依赖的AWS SDK可能对Minio新版API的某些特性支持不完善,开启兼容模式后可解决ListObjectsV2请求异常。检查网络连通性
- 宿主机执行
curl http://localhost:9000,确认Minio服务正常运行 - 进入Laravel容器,执行
curl http://minio:9000(替换为你的Minio服务地址),验证容器间网络是否通畅 - 排查宿主机防火墙、Docker iptables规则,确保9000端口未被拦截
- 宿主机执行
更新AWS相关依赖
Laravel使用的aws/aws-sdk-php和league/flysystem-aws-s3-v3旧版本可能存在PHP 8.2适配问题。执行以下命令更新到最新稳定版:composer update aws/aws-sdk-php league/flysystem-aws-s3-v3
快速验证脚本
写一个极简脚本跳过Laravel封装层,直接测试AWS SDK与Minio的通信:
<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1', 'endpoint' => 'http://minio:9000', 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => '你的Minio密钥', 'secret' => '你的Minio密钥密码', ], ]); try { $result = $s3->listObjectsV2([ 'Bucket' => 'datalake', 'Prefix' => '1/files/KKu17oUjsxi3EmGrQMhnJzS38rwiFpE7GgrXxSoq.txt/', 'MaxKeys' => 1, ]); print_r($result); } catch (Exception $e) { echo $e->getMessage(); }
内容的提问来源于stack exchange,提问作者Matheus Bento
相关产品推荐
相关产品推荐

