Python Boto3-如何通过代理连接到S3?

Python Boto3-如何通过代理连接到S3?,python,amazon-s3,docker-compose,boto3,Python,Amazon S3,Docker Compose,Boto3,我正在使用一个容器来模拟在其上运行的S3服务器(无需授权或凭据) 我正在尝试使用python和boto3简单地连接并打印所有bucket名称的列表 这是我的docker compose: s3: image: andrewgaul/s3proxy environment: S3PROXY_AUTHORIZATION: none hostname: s3 ports: - 4569:80 volumes: - ./data/s3:/data 这是我的密码: s3 = boto3.re

我正在使用一个容器来模拟在其上运行的S3服务器(无需授权或凭据)

我正在尝试使用python和boto3简单地连接并打印所有bucket名称的列表

这是我的docker compose:

s3:
image: andrewgaul/s3proxy
environment:
  S3PROXY_AUTHORIZATION: none
hostname: s3
ports:
  - 4569:80
volumes:
  - ./data/s3:/data
这是我的密码:

s3 = boto3.resource('s3', endpoint_url='http://127.0.0.1:4569')

for bucket in s3.buckets.all():
    print(bucket.name)enter code here
以下是我收到的错误消息:

botocore.exceptions.NoCredentialsError: Unable to locate credentials
我尝试了这个解决方案=>


但仍然不能工作,我不明白我做错了什么首先,Bot3总是尝试用AWS API密钥与S3服务器握手。即使您的模拟服务器不需要密码,您仍然需要在.aws/credentials或程序中指定密码。e、 g

[default] 
aws_access_key_id = x
aws_secret_access_key = x
硬编码虚拟访问密钥示例

import boto3
session = boto3.session(
  aws_access_key_id = 'x', 
  aws_secret_access_key = 'x')

s3 = session.resource('s3', endpoint_url='http://127.0.0.1:4569')

第二,我不知道你的“s3模拟容器”实现了什么样的协议和可靠性。为了让生活更轻松,我总是建议任何想要模拟S3负载测试或任何使用方法的人(谢谢:)我尝试了它=>session=boto3.session.session(aws\u access\u key\u id='',aws\u secret\u access\u key='')=>S3=session.resource('S3',endpoint\u url=')=>print(S3.get\u available\u subresources())它工作得很好,我得到了我想要的(所有可用子资源的数组),但是当我试图使用其中一个子资源上传一个文件=>s3.Object(BUCKET\u NAME,file\u NAME)。put(Body=open(file\u NAME,'rb'))时,我得到了这个错误消息=>('Connection aborted',ConnectionRefusedError(111,'Connection deneled'))@LouisW作为一个新问题,请记住提到您的“本地化S3实例”,这可能取决于boto的版本,但对我来说,以下代码返回了一个错误,使用session=boto3.session(这是否回答了您的问题?