У меня есть простое приложение Node, которое отправляет сообщения AWS SQS. Для местного развития я предоставляю AWS SDK с region
, queueUrl
, accessKeyId
, secretAccessKey
.Контейнер-докер не синхронизирован с хостом
Все работает нормально, пока я не закрою приложение и не запустил контейнер. Тогда, когда SQS хочет сделать что-то я получаю следующую ошибку
{ SignatureDoesNotMatch: Signature expired: 20161211T132303Z is now earlier than 20161211T142227Z (20161211T143727Z - 15 min.)
Если добавить correctClockSkew: true
исправляет эту проблему.
Что Докер делает требовать 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 минут.