我正在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一样。
答案 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