2016-12-11 14 views
0

У меня есть простое приложение 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 минут.

ответ

0

Docker запускается внутри виртуальной машины в Windows и MacOS, а часы этой виртуальной машины могут не синхронизироваться с ОС вашего ноутбука. Есть довольно много решений, которые я видел, в основном один офф команды в том числе:

docker run -it --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i date -u $(date -u +%m%d%H%M%Y) 

И от this answer есть:

docker-machine ssh default "sudo date -u $(date -u +%m%d%H%M%Y)" 

Лучшее решение, которое я видел за это запустить НПТ контейнер в privledged режиме, поэтому он может постоянно корректировать время на вашем Docker хозяина:

docker run -d --restart unless-stopped --name ntp --privileged tutum/ntpd 

Посмотреть докер ступицу репо для получения более подробной информации: https://hub.docker.com/r/tutum/ntpd/

Смежные вопросы