【问题标题】:Connection Refused to Minio Docker instance from my Django Application从我的 Django 应用程序拒绝连接到 Minio Docker 实例
【发布时间】:2020-10-29 14:15:22
【问题描述】:

您好,我正在尝试从 django 实例连接到在 docker 容器内运行的 Minio 实例,该实例也在 docker 容器内运行。

我不断收到此错误:

2020-10-29 13:59:17,568 urllib3.util.retry DEBUG    Incremented Retry for (url='/'): Retry(total=0, connect=None, read=None, redirect=None, status=None)
2020-10-29 13:59:20,773 urllib3.connectionpool WARNING  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /
2020-10-29 13:59:20,774 urllib3.connectionpool DEBUG    Starting new HTTPS connection (6): minio:9000

我的 docker-compose 文件如下:

version: "3.7"

services:
    db:
        container_name: db
        image: mariadb
        restart: always
        ports:
          - '3306:3306'
        environment:
          MYSQL_DATABASE: 'django_dev'
          MYSQL_USER: 'user'
          MYSQL_PASSWORD: 'password'
          MYSQL_ROOT_PASSWORD: 'password'
        volumes:
          - ./mariadb:/var/lib/mysql

    minio:
        container_name: minio
        image: minio/minio
        command: 'server /export'
        environment: 
          MINIO_ACCESS_KEY: weak_access_key
          MINIO_SECRET_KEY: weak_secret_key
        ports:
          - '9000:9000'
        volumes:
          - ./minio:/export

    web:
        container_name: web
        build: 
          context: ./django/
          dockerfile: ./Dockerfile
          target: dev
        command: python manage.py runserver 0.0.0.0:8000
        volumes: 
          - ./django:/usr/src/app
        ports:
          - "8000:8000"
        env_file: 
          - ./.env.dev
        depends_on:
          - minio
          - db

    phpmyadmin:
        container_name: db_viewer
        image: phpmyadmin/phpmyadmin
        restart: always
        ports:
          - '8080:80'
        environment:
          PMA_HOST: db
          MYSQL_ROOT_PASSWORD: 'password'
        depends_on:
          - db

设置客户端的代码:

minioClient = Minio('minio:9000',
                  access_key='weak_access_key',
                  secret_key='weak_secret_key')
minioClient.list_buckets()

我使用 WSL2 作为开发环境。

Python 版本 3.7.7, Django 版本 3.1.2, Minio 版本 6.0.0

感谢您的宝贵时间。

*编辑:我通过 localhost:9000 从我的机器访问 minio 服务。

【问题讨论】:

    标签: python django docker minio


    【解决方案1】:

    如果您在 localhost 上工作,它不会使用 https。 Minio 构造函数的默认实现假定连接是https。 要使用http 而不是https,请将secure=False 传递给Minio 构造函数。

    minioClient = Minio('minio:9000',
                      access_key='weak_access_key',
                      secret_key='weak_secret_key',
                      secure=False)
    minioClient.list_buckets()
    

    【讨论】:

      【解决方案2】:

      默认情况下,django minio 连接器尝试使用 https 连接到 minio。由于您没有使用 https 运行 minio,因此连接器会出错,因为它不理解协议。 要解决此问题,只需在 djangos settings.py 中设置 MINIO_STORAGE_USE_HTTPS=False(有关官方文档,请参阅 here)。

      【讨论】:

      • 你在正确的轨道上,我必须将 secure: False 添加到 Minio 类的构造函数调用中。谢谢。
      猜你喜欢
      • 2022-10-13
      • 2021-01-20
      • 2020-02-13
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2017-10-25
      • 2020-06-02
      相关资源
      最近更新 更多