【发布时间】:2017-04-26 12:29:25
【问题描述】:
我有一个向 AWS SQS 发送消息的简单节点应用程序。对于本地开发,我为 AWS SDK 提供region、queueUrl、accessKeyId、secretAccessKey。
在我将应用程序 dockerise 并作为容器运行之前,一切正常。然后每当 SQS 想做某事时,我都会收到以下错误
{ SignatureDoesNotMatch: Signature expired: 20161211T132303Z is now earlier than 20161211T142227Z (20161211T143727Z - 15 min.)
如果我添加correctClockSkew: true,它会解决问题。
docker 做什么来要求correctClockSkew: true 但在 MacOS 中运行 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 分钟后可靠地与主机不同步。
【问题讨论】:
标签: node.js amazon-web-services docker