首页 > 解决方案 > 错误 [ERR_IPC_CHANNEL_CLOSED]:用后端容器替换后端服务时通道关闭

问题描述

主机:Linux

容器:高山

APP是前端应用,通过WebSocket与后端服务连接。

当我在主机上本地启动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 容器上运行时不工作。

我将不胜感激解决问题的任何提示或指南。

问候,兰多。

标签: node.jslinuxdockersocket.io

解决方案


经过数小时的调试后,问题是自定义节点依赖项需要容器中不存在的配置文件。

添加缺失的配置文件后,worker启动并成功连接APP。这ERR_IPC_CHANNEL_CLOSED来自因找不到配置文件而终止的工作人员。


推荐阅读