错误 [ERR_IPC_CHANNEL_CLOSED]:用后端容器替换后端服务时通道关闭
Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed when replacing backend service with backend container
主机:Linux
容器:Alpine
APP是前端应用,通过WebSocket连接后端服务。
- APP 构建节点版本:9.6.1.
- 后端服务构建节点版本:10.22.1.
当我在主机本地启动 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
来自因找不到配置文件而终止的工作人员。
主机:Linux
容器:Alpine
APP是前端应用,通过WebSocket连接后端服务。
- APP 构建节点版本:9.6.1.
- 后端服务构建节点版本:10.22.1.
当我在主机本地启动 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
来自因找不到配置文件而终止的工作人员。