在docker容器之间连接scality / s3服务器

时间:2018-03-17 17:03:02

标签: docker amazon-s3 docker-compose boto3

我们正在使用基于python的解决方案,它将从S3加载和存储文件。对于开发和本地测试,我们使用具有docker和docker-compose的流浪环境。我们有两个docker-compose定义 - 一个用于辅助后端服务(mongo,restheart,redis和s3),另一个包含使用后端服务的基于python的REST API公开解决方案。

当我们的“前端”docker-compose组与restheart交互时,这很好用(在http调用中使用restheart容器的名称作为服务器主机)。当我们对scality / s3服务器执行相同操作时,这不起作用。

有趣的是,我们创建了一个测试套件,用于在主机上运行的python测试套件中使用scality / s3服务器(windows10),通过vagrant到scality / s3服务器的docker容器转发端口docker-compose组。我们使用了endpoint_url localhost,它完美无缺。

在错误情况下(当前端Web服务想要写入S3时),“前端”服务始终响应: botocore.exceptions.ClientError:调用CreateBucket操作时发生错误(InvalidURI):无法解析指定的URI。检查您的restEndpoints配置。 并且s3server总是以http 400和消息响应:

s3server | { “名称”: “S3”, “clientIP”: “:: FFFF:172.20.0.7”, “CLIENTPORT”:49404 “列举HTTPMethod”: “PUT”, “httpURL”: “/原始数据”,“时间“:1521306054614,”req_id“:”e385aae3c04d99fc824d“,”level“:”info“,”message“:”收到请求“,”主机名“:”cdc8a2f93d2f“,”pid“:83} s3server | { “名称”: “S3”, “bytesSent”:233, “clientIP”: “:: FFFF:172.20.0.7”, “CLIENTPORT”:49404 “列举HTTPMethod”: “PUT”, “httpURL”:“/生-data “的 ”httpCode“:400 下, ”时间“:1521306054639 ”REQ_ID“: ”e385aae3c04d99fc824d“, ”elapsed_ms“:25.907569, ”电平“: ”信息“, ”消息“:” 回复错误XML “,”主机名“:”cdc8a2f93d2f“,”pid“:83}

我们用这个boto3代码调用这个scality:

    s3 = boto3.resource('s3',
                        aws_access_key_id='accessKey1',
                        aws_secret_access_key='verySecretKey1',
                        endpoint_url='http://s3server:8000')
    s3_client = boto3.client('s3',
                             aws_access_key_id='accessKey1',
                             aws_secret_access_key='verySecretKey1',
                             endpoint_url='http://s3server:8000')

    s3.create_bucket(Bucket='raw-data') # here the exception comes
    bucket = self.s3.Bucket('raw-data')

1 个答案:

答案 0 :(得分:2)

这个问题很常见。在您的Docker容器中挂载的config.json文件中,我假设有一个restEndpoints部分,您必须将域名与默认区域相关联。这意味着您的前端域名应该在那里指定,匹配默认区域。 请注意,默认区域不会阻止您使用其他区域:如果您没有另行指定,则只会在您创建存储区的位置。

将来,我建议您直接在Zenko Forum上打开问题,因为这是大多数社区和核心开发人员所在的地方。

干杯,

洛尔