【发布时间】:2021-12-24 19:09:18
【问题描述】:
我使用 http 模块在 nodejs 中编写了以下代码。
它基本上是监听事件流(所以连接是永久的)。
http.get(EVENT_STREAM_ADDRESS, res => {
res.on('data', (buf) => {
const str = Buffer.from(buf).toString();
console.log(str);
});
res.on('error', err => console.log("err: ", err));
});
如果我在我的 Mac 上运行上述代码,它可以正常工作,并且我会在多个小时后将 data 记录到控制台。
但是在具有非常基本配置的 Docker 中,它会在一段时间后停止接收数据而不会出现任何错误。应用程序中的其他端点工作正常(例如 Express 端点),但这个 http.get listener 只是挂起。
Dockerfile
FROM node:current-alpine
WORKDIR /app
EXPOSE 4000
CMD npm install && npm run start
你有什么想法可以克服这个问题吗?
要重现我有时需要等待几个小时的情况真的很难调试。
干杯
【问题讨论】:
-
你检查过容器日志吗?也许主机睡眠并暂停 Docker 容器?
-
可能是与超时/内存有关的问题,请尝试将控制台日志放在 res.on 之外
标签: node.js docker http http-streaming