最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

是否可以在Docker容器中使用npm serialPort?

运维笔记admin10浏览0评论

是否可以在Docker容器中使用npm serialPort?

是否可以在Docker容器中使用npm serialPort?

我有一个节点项目,它在ubuntu的docker容器中运行,并且主机也是ubuntu。

在我的节点项目(用打字稿编写)中,我试图使用npm 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机器上可以吗?

任何帮助将不胜感激。

回答如下:

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

深入到节点串行端口的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
发布评论

评论列表(0)

  1. 暂无评论