2016-12-11 2 views
0

AWS SQS에 메시지를 보내는 간단한 Node 앱이 있습니다. 지역 개발을 위해 AWS SDK에 region, queueUrl, accessKeyId, secretAccessKey을 제공하고 있습니다.Docker 컨테이너가 호스트와 동기화되지 않습니다.

앱을 도킹하고 컨테이너로 실행할 때까지 모든 것이 제대로 작동합니다. 내가 correctClockSkew: true를 추가 할 경우 SQS 나는 다음과 같은 오류를

{ SignatureDoesNotMatch: Signature expired: 20161211T132303Z is now earlier than 20161211T142227Z (20161211T143727Z - 15 min.)

을 얻을 뭔가를하고 싶은 그런 때마다이 문제를 해결합니다. 고정 표시기 편집

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

맥 OS

노드 응용 프로그램

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; 
}); 

에서 correctClockSkew: true하지만 실행 노드를 필요로하고 무엇

원래 AWS의 잘못된 시간 오류가 계속 발생했기 때문에 원래 질문을 만들었습니다. 이제 ElasticSearch에서도 오류가 발생합니다. 왜 내 컨테이너가 호스트와 약 15 분간 안정적으로 동기화되지 않습니다.

답변

0

Docker는 Windows 및 MacOS에서 VM 내부에서 실행되며 해당 VM의 시계가 랩톱의 OS와 동기화되지 않을 수 있습니다. 대부분 하나의 명령이 포함 떨어져 본 적이 꽤 많은 솔루션이 있습니다

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)" 

내가 이것을 본 적이 가장 좋은 해결책은 NTP를 실행하는 것입니다

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

은 자세한 내용은 고정 표시기 허브의 repo를 참조하십시오 : 그것은 지속적으로 고정 표시기 호스트에서 시간을 조정할 수 있도록 privledged 모드에서 컨테이너 https://hub.docker.com/r/tutum/ntpd/

관련 문제