错误 [ERR_IPC_CHANNEL_CLOSED]:用后端容器替换后端服务时通道关闭

Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed when replacing backend service with backend container

主机:Linux

容器:Alpine

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

当我在主机本地启动 APP 后端服务 时,连接成功。

我正在尝试 docker 化 后端服务 ,创建如下所示的 DockerFile(简化版),并使用 docker 文件创建图片和 运行 那个图片。

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 来自因找不到配置文件而终止的工作人员。