我有一个简单的Node应用程序,可以向AWS SQS发送消息。在本地开发中,我使用
一切正常,直到我将应用程序docker化并作为容器运行时。然后每当SQS想要执行某些操作时,我会收到以下错误消息:
那么,Docker是如何要求
Node应用程序
region
、queueUrl
、accessKeyId
和secretAccessKey
提供AWS SDK。一切正常,直到我将应用程序docker化并作为容器运行时。然后每当SQS想要执行某些操作时,我会收到以下错误消息:
{ SignatureDoesNotMatch: Signature expired: 20161211T132303Z is now earlier than 20161211T142227Z (20161211T143727Z - 15 min.)}
如果我添加correctClockSkew: true
,它就可以解决问题。那么,Docker是如何要求
correctClockSkew: true
,而在MacOS上运行Node时却不需要呢?Node应用程序
process.env.TZ = 'Europe/London';
const AWS = require('aws-sdk');
AWS.config.update({
region: 'eu-west-1',
correctClockSkew: true //this has to be set when running inside a docker container?
});
const sqs = new AWS.SQS({
apiVersion: '2012-11-05',
});
sqs.sendMessage({
QueueUrl: 'https://sqs.eu-west-1.amazonaws.com/522682236448/logback-paddle-prod-errors',
MessageBody: 'HelloSQS',
}, (err, data) => {
if (err) throw err;
});
Dockerfile
FROM node
RUN mkdir -p /usr/lib/app
WORKDIR /usr/lib/app
COPY app/ /usr/lib/app/
RUN npm install
CMD ["node", "index.js"]
docker run -d user/image
编辑
我最初创建这个问题是因为我一直收到AWS不正确的时间错误,现在我在ElasticSearch中也遇到了这个问题。为什么我的容器始终与主机相差约15分钟?