如何使Minio客户端(从主机)与Minio服务器(泊坞窗容器)进行通信?

时间:2019-03-29 18:14:02

标签: python python-2.7 docker-compose ubuntu-16.04 minio

我正在docker-compose容器中运行一个微型服务器。我正在尝试使用minio-client(python SDK)从主机(Ubuntu)(而不是容器)将文件上传到容器中的minio服务器。 我没有实现它的预期。 我不清楚这是因为我的终结点(URL),还是由于容器和主机之间的连接问题?

我尝试过的端点:

url_1 ='http://minio:9000'#来自我的默认设置(用于微型链接);

url_2 ='http://localhost:9000/minio/test'#通过Minio浏览器。

对于url_1,我得到的是:“ botocore.exceptions.EndpointConnectionError:无法连接到端点URL:http://minio:9000/test”。 错误行:s3.create_bucket(Bucket ='test')

对于url_2,我得到的是:“对该存储桶的所有访问已被禁用。”。 错误行:s3.create_bucket(Bucket ='test')

我尝试了类似的事情:在主机中同时激活我的minio-server和minio-client。然后,我从minio-client上载文件到minio-server。我可以在本地的Minio浏览器中看到那些上传的文件。

######### python脚本上传文件
import { schema } from './modules'
######### Minio的docker-yml文件
import boto3

from botocore.client import Config

import os

import getpass

my_url1='http://minio:9000' # this is from os.environ['S3_URL']
my_url2='http://localhost:9000/minio/test' # this is from browser

s3 = boto3.resource('s3',
                endpoint_url=my_url2,
                aws_access_key_id=os.environ['USER'],
                aws_secret_access_key = getpass.getpass('Password:'),
                config = Config(signature_version='s3v4'),
                region_name='us-east-1')

print ('********', s3)

s3.create_bucket(Bucket='test')

uploadfile= os.getcwd()+'/'+'test.txt'
s3.Bucket('testBucket').upload_file(uploadfile,'txt')

我希望可以从minio浏览器('http://localhost:9000/minio/test')看到上传的文件,就像我在主机上同时激活minio-server和minio-client一样。

3 个答案:

答案 0 :(得分:1)

使用默认的docker网络,您将不得不尝试在主机上http://localhost:9000处访问minio。因此,您可以仅在Python脚本中使用此URL。 http://minio:9000将在与您的minio服务器相同的docker网络上的容器中工作。

答案 1 :(得分:0)

尝试使用Pyminio客户端而不是boto3。

import os
from pyminio import Pyminio

pyminio_client = Pyminio.from_credentials(
    endpoint='http://localhost:9000/',
    access_key=os.environ['USER'],
    secret_key=getpass.getpass('Password:')
)

pyminio_client.mkdirs('/test/')

pyminio_client.put_file(
    to_path='/test/',
    file_path=os.path.join(os.getcwd(), 'test.txt')
)

答案 2 :(得分:0)

在你的 compose.yml 文件中使用这个配置

version: "3"
services:
    
    minio:
        image: "minio/minio"
        container_name: mi
        ports:
            - "9000:9000"
        environment:
            - "MINIO_ACCESS_KEY=ACCRESS"
            - "MINIO_SECRET_KEY=SECRET"
        restart: always
        command: server /data
    mc:
        image: minio/mc
        container_name: mc
        network_mode: host
        entrypoint: >
          /bin/sh -c "
          /usr/bin/mc config host add minio http://127.0.0.1:9000 ACCESS SECRET;
          /usr/bin/mc rm -r --force minio/psb-new;
          /usr/bin/mc mb minio/psb-new;
          /usr/bin/mc policy set public minio/psb-new;
          exit 0;
          "
networks:
  elastic:
    driver: bridge