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

使用Root密钥访问Minio触发AccessDenied错误,求排查方案

问题

我有一个包含Minio(文件存储)、Django后端的Docker集群,配置如下:

files:
    image: minio/minio
    container_name: files
    env_file: .env
    command: server /data --console-address ":9001"
    healthcheck:
      test: curl -I ${MINIO_EXTERNAL_ENDPOINT}/minio/health/live
      interval: 5s
      timeout: 5s
      retries: 5
    volumes:
      - s3:/data
    ports:
      - 9000:9000
      - 9001:9001

  backend:
    build: ./backend
    container_name: backend
    env_file: .env
    volumes:
      - ./scripts/backend:/app/scripts
    healthcheck:
      test: curl --fail ${BACKEND_HC} || exit 1
      interval: 10s
      timeout: 5s
      retries: 5
    ports:
      - 8000:8000
    depends_on:
      files:
        condition: service_healthy

此前运行正常,更换SSD后因空间不足,在Docker Desktop执行了Troubleshoot -> Purge Data操作。重新克隆项目启动后,遇到Minio访问拒绝错误,关键堆栈信息如下:

backend  | [2024-11-13 15:50:41 +0700] [13] [INFO] Worker exiting (pid: 13)
backend  | [2024-11-13 15:50:41 +0700] [14] [ERROR] Exception in worker process
backend  | Traceback (most recent call last):

...

backend  |     application = get_wsgi_application()
backend  |                   ^^^^^^^^^^^^^^^^^^^^^^
backend  |   File "/usr/local/lib/python3.11/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
backend  |     django.setup(set_prefix=False)
backend  |   File "/usr/local/lib/python3.11/site-packages/django/__init__.py", line 24, in setup
backend  |     apps.populate(settings.INSTALLED_APPS)
backend  |   File "/usr/local/lib/python3.11/site-packages/django/apps/registry.py", line 124, in populate     
backend  |     app_config.ready()
backend  |   File "/usr/local/lib/python3.11/site-packages/django_minio_backend/apps.py", line 31, in ready    
backend  |     mbs = MinioBackendStatic()
backend  |           ^^^^^^^^^^^^^^^^^^^^
backend  |   File "/usr/local/lib/python3.11/site-packages/django_minio_backend/models.py", line 482, in __init__

backend  |     self.check_bucket_existence()  # make sure the `MINIO_STATIC_FILES_BUCKET` exists
backend  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend  |   File "/usr/local/lib/python3.11/site-packages/django_minio_backend/models.py", line 408, in check_bucket_existence
backend  |     if not self.client.bucket_exists(self.bucket):
backend  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend  |   File "/usr/local/lib/python3.11/site-packages/minio/api.py", line 696, in bucket_exists
backend  |     self._execute("HEAD", bucket_name)
backend  |   File "/usr/local/lib/python3.11/site-packages/minio/api.py", line 440, in _execute
backend  |     return self._url_open(
backend  |            ^^^^^^^^^^^^^^^
backend  |   File "/usr/local/lib/python3.11/site-packages/minio/api.py", line 423, in _url_open
backend  |     raise response_error
backend  | minio.error.S3Error: S3 operation failed; code: AccessDenied, message: Access denied, resource: /local-static, request_id: 18077B04951EF538, host_id: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8, bucket_name: local-static

错误显示Minio验证local-static桶存在时失败,我仅使用Root用户的Access/Secret密钥,从未配置过任何策略,不清楚该如何修复。

解决方案

  • 确认环境变量一致性:检查.env文件中MINIO_ROOT_USER、MINIO_ROOT_PASSWORD,与Django配置里的MINIO_ACCESS_KEY、MINIO_SECRET_KEY是否完全一致,包括大小写、特殊字符。Purge Data后可能.env文件被重置或遗漏,必须保证两端密钥完全匹配。
  • 手动创建缺失的桶:访问http://localhost:9001,用Root用户密钥登录Minio控制台,点击左侧「Buckets」→「Create Bucket」,输入桶名local-static,保持默认设置完成创建。
  • 重置Minio存储卷:如果上述步骤无效,彻底清除异常存储卷后重建:
    # 停止并删除容器及关联卷
    docker-compose down -v
    # 删除Minio存储卷(替换<项目目录>为你的实际项目路径)
    docker volume rm <项目目录>_s3
    # 重新启动容器
    docker-compose up -d
    
    容器启动后,再次通过控制台创建local-static桶,然后重启Django后端容器。
  • 检查健康检查配置:确认.env中的MINIO_EXTERNAL_ENDPOINT是否正确,容器内部通信应使用http://files:9000,外部访问用http://localhost:9000。健康检查失败可能导致Minio未完全就绪就启动后端,引发权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:46:02