node.js - 错误 [ERR_IPC_CHANNEL_CLOSED]:用后端容器替换后端服务时通道关闭
问题描述
主机:Linux
容器:高山
APP是前端应用,通过WebSocket与后端服务连接。
- APP使用node版本构建:9.6.1。
- 后端服务使用节点版本构建:10.22.1。
当我在主机上本地启动APP和后端服务时,连接成功。
我正在尝试对后端服务进行 docker 化,创建如下所示的 DockerFile(简化版),并使用 dockerfile 创建映像并运行该映像。
FROM repo/node:v10.22.1
COPY node/backend-service/package.json node/backend-service/package.json
WORKDIR /node/backend-service
RUN npm install --unsafe
CMD [ "/usr/bin/dumb-init","--","/usr/bin/node","/node/backend-service/index.js" ]
EXPOSE 8811
一切正常,容器已从支持的服务映像成功创建。我在没有网络隔离的情况下运行后端服务,如下所示:
docker run --network host backend-service-image
APP(在主机本地运行)和后端服务(在容器上运行,没有网络隔离)之间的通信不工作。它抛出以下错误:
[2021-08-03 14:52:14.455] [ERROR] backend_service/index.js - [MASTER: 8] Uncaught exception: Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed
at ChildProcess.target.send (internal/child_process.js:636:16)
at Socket.socketEventHandlers.(anonymous function) (/node/backend_service/src/routes/session.js:67:28)
at Socket.emit (events.js:198:13)
at Socket.onevent (/node/backend_service/node_modules/socket.io/lib/socket.js:335:8)
at Socket.onpacket (/node/backend_service/node_modules/socket.io/lib/socket.js:295:12)
at Client.ondecoded (/node/backend_service/node_modules/socket.io/lib/client.js:193:14)
at Decoder.Emitter.emit (/node/backend_service/node_modules/component-emitter/index.js:134:20)
at Decoder.add (/node/browser_service/node_modules/socket.io-parser/index.js:247:12)
at Client.ondata (/node/backend_service/node_modules/socket.io/lib/client.js:175:18)
at Socket.emit (events.js:198:13)
我觉得奇怪的是,当后端服务在主机上启动时工作,但在没有网络隔离的 docker 容器上运行时不工作。
我将不胜感激解决问题的任何提示或指南。
问候,兰多。
解决方案
经过数小时的调试后,问题是自定义节点依赖项需要容器中不存在的配置文件。
添加缺失的配置文件后,worker启动并成功连接APP。这ERR_IPC_CHANNEL_CLOSED
来自因找不到配置文件而终止的工作人员。
推荐阅读
- java - 仅当光传感器事件从 100 到 50 时如何计算,如果它从 0 到 50 则不计算
- security - 如何防止对 Compute Engine 外部 IP 地址的公开访问?
- r - 将虚拟变量从数字转换为 R 中卡方检验的因子
- kubernetes - coredns pod 始终处于 CrashLoopBackOff 状态
- android - 找不到插件“cordova-plugin-ionic”的 plugin.xml
- swift - 如何在不依赖 indexPath 的情况下实现 didSelectRowAt 方法
- javascript - 向 Phaser 3 游戏添加场景不起作用
- python - find the previous row in a pandas dataframe
- python - 如何导入带有本地文件的库?
- vba - 代表 Outlook 邮件中的电子邮件 ID 而不是发件人 ID 捕获实际