node.js - Docker 容器与主机不同步

标签 node.js amazon-web-services docker

我有一个简单的 Node 应用程序,可以将消息发送到 AWS SQS。对于本地开发,我为 AWS SDK 提供了 regionqueueUrlaccessKeyIdsecretAccessKey

一切正常,直到我对接应用程序并作为容器运行。然后每当 SQS 想要做某事时,我都会收到以下错误

{ SignatureDoesNotMatch:签名已过期:20161211T132303Z 现在早于 20161211T142227Z(20161211T143727Z - 15 分钟)

如果我添加 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;
});

docker 文件

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 分钟。

最佳答案

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

我见过的最好的解决方案是在特权模式下运行一个 ntp 容器,这样它就可以不断调整你的 docker 主机上的时间:

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

有关更多详细信息,请参阅 docker hub 存储库:https://hub.docker.com/r/tutum/ntpd/

关于node.js - Docker 容器与主机不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087325/

相关文章:

命令连接拒绝 MySQL 访问

Docker 编写使用 env_file 参数指定的环境变量在 dockerfile 中不起作用

javascript - 使用 jsdom 和 nodeJS 加载 SpreadJS

node.js - 谷歌 OAuth 类型错误 : Cannot read property 'OAuth2' of undefined

android - 如何在不使用 SDK 的情况下将文件从 Android 上传到 Amazon S3

amazon-web-services - 配置单元查询抛出错误输入字符串: “__HIVE_D”不是整数

git - 带有 git 私有(private)子模块的 docker autobuild

docker - gradle尝试写入out目录时Docker镜像中的权限问题

javascript - 如何在 Node/Javascript 中以编程方式减小 PDF 大小

javascript - 我正在尝试使用 mocha 运行我的测试脚本,但出现错误 "Reference Error: beforeEach is not defined"