【发布时间】:2019-09-30 18:09:56
【问题描述】:
我有一个node项目,在ubuntu的docker容器中运行,宿主机也是ubuntu。
在我的节点项目(用打字稿编写)中,我正在尝试使用 npm 串行端口库。
https://www.npmjs.com/package/serialport
我有台词:
include * as serialport from 'serialport'
// further down
serialport.list((err, list) => {
// after checking for errors
console.log(list);
});
现在,如果我只是在主机上运行此代码,我会得到一个包含大量信息的结果列表。例如,对于一台设备:
{ manufacturer: 'Prolific Technology Inc.',
serialNumber: undefined,
pnpId: 'usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0',
locationId: undefined,
vendorId: '067b',
productId: '2303',
comName: '/dev/ttyUSB0' }
但是当我在 docker 容器中运行相同的代码时,我得到以下信息:
{ manufacturer: undefined,
serialNumber: undefined,
pnpId: undefined,
locationId: undefined,
vendorId: undefined,
productId: undefined,
comName: '/dev/ttyUSB0' }
如您所见,大部分信息返回为未定义。
这是为 docker 容器提供特权状态并访问 /dev 卷。例如在 docker-compose 中
myapp:
image: myappimage
ports: 8999:8999
volumes:
- /dev:/dev
- ./:/myappdir
privileged: true
command: ./scripts/runApp.sh
或者跑步
docker run --privileged -v /dev:/dev -v /path/to/my/app:/app node:4.4.0 ./scripts/runApp.sh
应用程序运行,并检测 /dev 上可用的串行端口,但未检索到设备信息。
此链接:
Docker container can't see a serial port device
建议它甚至可能无法做到这一点,至少对于 mac 来说是不可能的。在linux机器上可以吗?
任何帮助将不胜感激。
【问题讨论】:
标签: node.js docker ubuntu node-serialport