AWS S3使用docker容器解析URI错误

时间:2017-08-11 13:48:33

标签: node.js amazon-s3

在我的本地环境中,我使用快速/节点后端和AWS S3服务器(使用scality/S3)开发文件上载功能。这两种服务都在自己的容器中进行了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}

节点后端记录错误:

{ 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编码问题的答案,但它对我的情况不起作用:/

有没有人知道为什么它无法解析URI?

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您可以通过使用卷提供自己的config.json来解决此问题,如建议here

  1. 复制config.json
  2. 5 gmr-smtp-in.l.google.com. 10 alt1.gmr-smtp-in.l.google.com. 20 alt2.gmr-smtp-in.l.google.com. 30 alt3.gmr-smtp-in.l.google.com. 40 alt4.gmr-smtp-in.l.google.com. 添加到"s3server": "us-east-1",
  3. "restEndpoints" 或者,如果您正在使用泊坞窗撰写,请在docker run -v $(pwd)/config.json:/usr/src/app/config.json ...中添加以下内容:
  4. docker-compose.yaml