AWS S3使用docker容器parsingURI错误

在本地环境中,我使用express / node后端和AWS S3服务器(使用scality / S3 )开发文件上载function。 两项服务都在自己的容器中docker化,通信正常。 我的问题是,S3服务器似乎不理解上传请求。 这里是我尝试使用的代码:

const s3 = new S3({ accessKeyId: 'accessKey1', secretAccessKey: 'verySecretKey1', endpoint: 's3server:8000', sslEnabled: false, s3ForcePathStyle: true, }); function uploadFile(file) { const params = { Body: file, Bucket: 'testbucket', Key: 'testkey', ACL: 'public-read', }; s3.upload(params, (err, data) => { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); } 

S3服务器收到请求但发回错误:

 {"name":"S3","clientIP":"::ffff:172.18.0.5","clientPort":45066,"httpMethod":"PUT","httpURL":"/testbucket/testkey","time":1502458550488,"req_id":"7f4fac280644b5cf203c","level":"info","message":"received request","hostname":"faf8cb0b47d4","pid":103} {"name":"S3","bytesSent":192,"clientIP":"::ffff:172.18.0.5","clientPort":45066,"httpMethod":"PUT","httpURL":"/testbucket/testkey","httpCode":400,"time":1502458550491,"req_id":"7f4fac280644b5cf203c","elapsed_ms":2.607924,"level":"info","message":"responded with error XML","hostname":"faf8cb0b47d4","pid":103} 

而节点后端logging错误:

 { InvalidURI: Couldn't parse the specified URI. at Request.extractError (/usr/src/api/node_modules/aws-sdk/lib/services/s3.js:577:35) at Request.callListeners (/usr/src/api/node_modules/aws-sdk/lib/sequential_executor.js:105:20) at Request.emit (/usr/src/api/node_modules/aws-sdk/lib/sequential_executor.js:77:10) at Request.emit (/usr/src/api/node_modules/aws-sdk/lib/request.js:683:14) at Request.transition (/usr/src/api/node_modules/aws-sdk/lib/request.js:22:10) at AcceptorStateMachine.runTo (/usr/src/api/node_modules/aws-sdk/lib/state_machine.js:14:12) at /usr/src/api/node_modules/aws-sdk/lib/state_machine.js:26:10 at Request.<anonymous> (/usr/src/api/node_modules/aws-sdk/lib/request.js:38:9) at Request.<anonymous> (/usr/src/api/node_modules/aws-sdk/lib/request.js:685:12) at Request.callListeners (/usr/src/api/node_modules/aws-sdk/lib/sequential_executor.js:115:18) at Request.emit (/usr/src/api/node_modules/aws-sdk/lib/sequential_executor.js:77:10) at Request.emit (/usr/src/api/node_modules/aws-sdk/lib/request.js:683:14) at Request.transition (/usr/src/api/node_modules/aws-sdk/lib/request.js:22:10) at AcceptorStateMachine.runTo (/usr/src/api/node_modules/aws-sdk/lib/state_machine.js:14:12) at /usr/src/api/node_modules/aws-sdk/lib/state_machine.js:26:10 at Request.<anonymous> (/usr/src/api/node_modules/aws-sdk/lib/request.js:38:9) message: 'Couldn\'t parse the specified URI.', code: 'InvalidURI', region: null, time: 2017-08-11T13:35:50.510Z, requestId: '7f4fac280644b5cf203c', extendedRequestId: '7f4fac280644b5cf203c', cfId: undefined, statusCode: 400, retryable: false, retryDelay: 57.08331622136704 } 

我看到了关于utf-8编码问题的一些答案,但对我的情况并不奏效:/

有没有人有一个关于为什么不能parsingURI的想法?

感谢您的时间 !

您可以通过使用卷提供您自己的config.json来解决这个问题,正如这里所build议的那样。

  1. 复制config.json 。
  2. "s3server": "us-east-1","restEndpoints"
  3. docker run -v $(pwd)/config.json:/usr/src/app/config.json ...或者如果您使用的是docker compose,请docker-compose.yaml添加如下docker-compose.yaml
 s3server: image: scality/s3server restart: always expose: [8000] stdin_open: true tty: true container_name: s3server volumes: - "${PWD}/s3config.json:/usr/src/app/config.json"