【问题标题】:Is it possible to use npm serialPort from within a docker container?是否可以在 docker 容器中使用 npm serialPort?
【发布时间】: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


    【解决方案1】:

    以防万一其他人有同样的问题,我会在这里发布我找到的解决方案:

    深入研究节点串行端口的 linux 绑定,我看到“udevadm info -e”用于获取所有设备。在容器中运行该命令提供的信息比在主机上少,但这就是我找到此页面所需的可搜索信息的原因:

    udevadm does not show all attributes inside a docker container

    那一页给了我两个解决方案!首先,使用卷部分中的/run/udev:/run/udev:ro 使串口工作,然后使用network_mode:'host' 检测插入设备时的更改(为此我使用节点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
    

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2014-08-13
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多