node.js - 调用 docker api 时在 Windows 10 上读取 ENOTCONN 错误
问题描述
我试图通过我的节点项目使用以下代码启动我的 docker 映像的 exec 实例:
return axios.post(host + `/exec/${id}/start`, { Detach: false, Tty: true },
{ responseType: 'stream' })
.then(function () {
let stream = response.data
let socket = stream.socket
socket.on('data', (data: string) => {
process.stdin.pause()
if (!firstLine)
process.stdout.write(data)
firstLine = false
process.stdin.resume()
})
process.stdout.on('data', i => {
socket.write(i.toString())
if (i == DetachKey) {
rl.emit('SIGINT')
}
})
rl.on('SIGINT', function () {
// stop input
socket.emit('end')
process.stdin.pause()
process.stdout.write(exec_exit_msg)
process.exit(0)
})
})
在 Linux(Ubuntu 和 Mint)上一切正常,但是当我在 Windows 10 上测试我的代码时,我得到了错误打击:
Error: read ENOTCONN
at WriteStream.Socket._read (net.js:529:20)
at WriteStream.Readable.read (_stream_readable.js:453:10)
at resume_ (_stream_readable.js:929:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
我的节点版本是 v10.15.3(使用 nvm)。
套接字连接似乎有问题。我搜索了很多,但无法弄清楚如何解决问题。
解决方案
下面的部分代码会出错。我删除了它并稍微更改了代码但我不知道为什么在 ubuntu 中可以
process.stdout.on('data', i => {
socket.write(i.toString())
if (i == DetachKey) {
rl.emit('SIGINT')
}
})
推荐阅读
- android - Volley 无法与烧瓶服务器连接
- file - 从 Racket 的目录列表中删除隐藏文件
- module - Magento 2.3.4 Setup_Module
- excel - 如何在保留单元格信息的同时将 Excel 文件转换为 CSV?
- regex - 正则表达式允许单词之间有空格(没有特殊字符)但在开头删除空格
- android - 如何从带有动画的容器中删除片段?
- uwp - H264解码性能不佳
- scala - 在 Spark scala 中更新数据框的最佳方法
- r - 您如何制作搜索栏来查询闪亮仪表板中的格式化表
- mysql - 在基本 Spring-MVC(非引导)项目中访问 @Autowired 存储库(JPA)的问题