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/
我正在使用 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/