docker 容器中的 nodejs twitter api 抛出 401 错误

nodejs twitter api in docker container throw 401 error

我正在使用 nodejs 推特 api,它在本地环境中工作得非常好,但是当我尝试容器化时,它失败并出现来自 twitter.js 的 401 错误,即“HTTP 401未经授权的客户端错误状态响应代码。

错误

> node app.js

Error: Status Code: 401
    at Request.<anonymous> (/usr/src/app/node_modules/twitter/lib/twitter.js:277:28)
    at Request.emit (events.js:315:20)
    at Request.onRequestResponse (/usr/src/app/node_modules/request/request.js:1059:10)
    at ClientRequest.emit (events.js:315:20)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:603:27)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:117:17)
    at TLSSocket.socketOnData (_http_client.js:472:22)
    at TLSSocket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:297:12)
    at readableAddChunk (_stream_readable.js:273:9)

我对此进行了搜索,发现这可能是 docker 容器中的时间不匹配问题。我的 docker 集装箱比实际时间晚了 运行 1 个半小时。我不确定这是不是唯一的问题。

我的docker文件

FROM node:13.13.0-alpine
    
# Create app directory
WORKDIR /usr/src/app

COPY package*.json ./

# Bundle app source
COPY . .

ENV KAFKA_HOST=localhost:9092 \
    KAFKA_TOPIC=tweetstream 

CMD ["npm", "start"]

如何在此 docker 图像中设置正确的时间?

OAuth 需要紧密时间同步,所以这很可能是问题所在,尤其是当您的代码在时间同步的系统中的容器之外工作时。

我在 Windows 主机上,正如我在问题中提到的,我的主机和容器之间存在时间差。

我做了什么来解决时差问题?

Search Hyper-V Manager -> Docker Desktop VM (seen on right bottom) -> Settings (new popup will open)
Management -> Integration services -> Time Synchronization (uncheck) -> Apply -> ok
Again go to the same location and check the Time Synchronization -> Apply -> ok  

我还觉得一旦您的 windows 机器进入休眠状态,您将不得不重做。

参考文章:https://thorsten-hans.com/docker-on-windows-fix-time-synchronization-issue

https://www.ivankrizsan.se/2015/10/31/time-in-docker-containers/