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

Laravel集成Minio调用PutObject失败:连接被拒绝求助

排查Minio无法上传文件的问题

核心问题分析

从报错和现象来看,容器网络内的DNS解析失败是主要原因:

  • Laravel Sail的PHP容器无法解析images.localhost或localhost:9000到Minio容器,导致连接拒绝
  • 桶名长度影响请求URL格式(虚拟主机/路径模式),但本质都是容器间通信的地址错误

1. 修正.env配置(关键步骤)

修改.env中的Minio相关配置,改用Docker服务名进行容器间通信:

AWS_ACCESS_KEY_ID=sail
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=images
AWS_USE_PATH_STYLE_ENDPOINT=true # 强制路径模式,避免子域名解析问题
AWS_ENDPOINT=http://minio:9000 # 用Minio容器的服务名(Sail默认服务名为minio)
AWS_URL=http://minio:9000/images

2. 验证Minio容器状态与连通性

  • 检查Minio容器是否正常运行:

    sail ps
    

    确认Minio容器状态为Up

  • 在PHP容器内测试与Minio的连通性:

    sail exec laravel.test curl http://minio:9000/minio/health/live
    

    返回OK则说明连通正常

  • 检查Minio存储卷的磁盘空间与权限:

    sail exec minio df -h
    

3. 清除配置缓存并验证

  • 清除Laravel配置缓存:

    sail artisan config:clear
    
  • 用Tinker测试文件上传:

    sail artisan tinker
    

    执行测试代码:

    Storage::disk('s3')->put('test_upload.jpg', file_get_contents('/var/www/html/public/favicon.ico'));
    

    无报错则说明上传功能恢复


4. 补充说明

  • 为什么之前正常现在失效?大概率是Docker网络重启后,容器DNS缓存更新,导致原localhost映射失效(容器内的localhost指向自身,而非宿主机)
  • 强制启用AWS_USE_PATH_STYLE_ENDPOINT=true可以避免AWS SDK根据桶名自动切换虚拟主机模式,彻底解决子域名解析问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:21