gpt4 book ai didi

node.js - 是否可以在 docker 容器中使用 npm serialPort?

转载 作者:行者123 更新时间:2023-12-02 21:05:43 25 4
gpt4 key购买 nike

我有一个node项目,在ubuntu的docker容器中运行,宿主机也是ubuntu。

在我的 Node 项目(用 typescript 编写)中,我正在尝试使用 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 串行端口的 linux 绑定(bind),我看到“udevadm info -e”用于获取所有设备。在容器中运行该命令提供的信息比在主机上少,但这就是我找到此页面所需的可搜索信息的原因:

udevadm does not show all attributes inside a docker container

那一页给了我两个解决方案!一、使用/run/udev:/run/udev:ro在volumes部分到serialport工作,然后使用network_mode:'host'检测插入设备时的变化(为此我使用 Node usb-detection)。

所以在我的 docker-compose 文件中,我现在有:

myapp:
image: myappimage
ports: 8999:8999
network_mode: "host"
volumes:
- /dev:/dev
- ./:/myappdir
- /run/udev:/run/udev:ro
privileged: true
command: ./scripts/runApp.sh

关于node.js - 是否可以在 docker 容器中使用 npm serialPort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com