[英]AWS S3 parse URI error with docker containers
在我的本地環境中,我使用快速/節點后端和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?
感謝您的時間 !
您可以通過使用卷提供自己的config.json來解決此問題,如此處所示 。
"s3server": "us-east-1",
到"restEndpoints"
。 docker run -v $(pwd)/config.json:/usr/src/app/config.json ...
docker-compose.yaml
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.