Docker 应用程序并不总是在 Ubuntu 20.04 中找到串口

Docker App Not Always Finding Serial Ports In Ubuntu 20.04

我正忙于 IoT 类型的应用程序,它需要通过串行端口连接的物理硬件。我们选择使用 Azure IoT Edge 架构在本地 PC 上部署应用程序。这有助于我们的 DevOps 周期。

要使用 Azure IoT Edge 要求我们的应用程序是容器化的,因此公开串行端口可能是一个很大的挑战。 PC 是 64 位的,运行 Ubuntu 20.04,并且有多个 USB、串行和 LAN 端口,我们可以将设备插入。

我们遵循这个伟大的 tutorial from Losant 来设置它。

我们的容器创建选项如下所示:

{
  "HostConfig": {
    "PortBindings": {
      "80/tcp": [
        {
          "HostPort": "5000"
        }
      ]
    },
    "Privileged": true,
    "Volumes": {
      "/dev": {}
    }
  }
}

我们将应用程序的端口 80 映射到 PC 上的端口 5000,并按照上面教程 link 中的建议设置 Volumes 和 Privileged 标签。

设备本身通过 USB 连接,因此我们必须从 FTDI website.

安装 Ubuntu 20.04 上的驱动程序

我的问题:

在某些情况下,我们的应用程序会找到串行端口 (tty/USB0),但在大多数情况下不会。如果我们在连接设备的情况下重启 PC,应用程序通常会找到该设备。我们如何更改 PC 设置/docker 设置/应用程序设置,以便它总能找到设备?

探索IoTEdge的以下能力,使模块按指定顺序启动:

Startup order is helpful if some modules depend on others. For example, you may want the edgeHub module to start first so that it's ready to route messages when the other modules start.

https://docs.microsoft.com/en-us/azure/iot-edge/module-composition?view=iotedge-2020-11

这实际上只是对卷语法的不幸误用。 This docker link 很有帮助。

解析后的语法如下:

{
    "HostConfig": {
        "Binds": [
            "/dev:/dev"
        ],
        "PortBindings": {
            "80/tcp": [
                {
                    "HostPort": "5000"
                }
            ]
        },
        "Privileged": true
    }
}

解决后一切按预期进行。