Рейтинг:0

Приложение Docker не всегда находит последовательные порты в Ubuntu 20.04

флаг jp

Я занят приложением типа IoT, для которого требуется физическое оборудование, подключенное через последовательный порт. Мы решили использовать архитектуру Azure IoT Edge для развертывания приложения на локальном ПК. Это помогает нашему циклу DevOps.

Для использования Azure IoT Edge требуется, чтобы наше приложение было контейнеризировано, поэтому предоставление доступа к последовательным портам может быть довольно сложной задачей. ПК 64-разрядный, работает под управлением Ubuntu 20.04 и имеет несколько портов USB, последовательный порт и порт LAN, к которым мы можем подключать устройства.

Мы последовали за этим великим туториал от Losant чтобы настроить это.

Наши варианты создания контейнера выглядят так:

{
  "Конфигурация хоста": {
    «Привязки портов»: {
      "80/TCP": [
        {
          "ХостПорт": "5000"
        }
      ]
    },
    «Привилегированный»: правда,
    "Тома": {
      "/dev": {}
    }
  }
}

Мы сопоставляем порт 80 нашего приложения с портом 5000 на ПК и устанавливаем тег Volumes и Privileged, как это предлагается в ссылке на руководство выше.

Само устройство подключено через USB, поэтому нам пришлось установить драйвер на Ubuntu 20.04 из веб-сайт FTDI.

Мой вопрос:

В некоторых случаях наше приложение найдет последовательный порт (tty/USB0), но в большинстве случаев нет. Если мы выключаем компьютер с подключенным устройством, приложение обычно находит устройство. Как мы можем изменить настройку ПК/настройку докера/настройку приложения, чтобы он всегда находил устройство?

ПРИМЕЧАНИЕ. Это дублирование этот вопрос на StackOverflow, так как я не был уверен, относится ли вопрос к этому или сюда.

флаг in
Когда контейнер Docker не находит подключенное устройство, что такое вывод терминала `sudo lsusb`? Мне интересно, захватывается ли устройство в другом месте на шине USB или вообще нет.
itstudes avatar
флаг jp
После запуска этой команды я получаю: `Шина 002 Устройство 001: ID 1d6b:0003 Корневой концентратор Linux Foundation 3.0` `Шина 001 Устройство 003: ID 0403:6015 Future Technology Devices International, Ltd Bridge (I2C/SPI/UART/FIFO)` «Шина 001 Устройство 002: ID 15a2:0300 Freescale Semiconductor, Inc. ADP102 SERIAL DIO» `Шина 001 Устройство 001: ID 1d6b:0002 Корневой концентратор Linux Foundation 2.0` Устройство 003 выглядит как устройство FTDI, поэтому кажется, что оно отображается на уровне ПК.
флаг in
Когда вы запускаете `docker info`, вы видите `Udev Sync Supported: true`? Если это неверно, то USB-устройству всегда нужно будет присваивать один и тот же идентификатор устройства, что не всегда возможно, поскольку они выдаются на основе различных факторов, таких как время прогрева ...
itstudes avatar
флаг jp
Итак, [учебник от Losant] (https://www.losant.com/blog/how-to-access-serial-devices-in-docker) выше рассказывает об этих правилах udev. Так что я думаю, что вы правы в этом.Я запустил команду `docker info` и не увидел ничего общего с настройками Udev. Я думаю, что мой формат для «Томов» не совсем правильный в разделе кода выше. Я просматривал [эту ссылку на докер на Volumes] (https://docs.docker.com/storage/volumes/#start-a-container-with-a-volume) и думаю, что вы должны использовать «Mounts ". Как только я получу правильный формат, я надеюсь, что все будет работать правильно.
Рейтинг:0
флаг jp

На самом деле это было просто неудачное неправильное использование синтаксиса для томов. Эта ссылка на докер был полезен.

Разрешенный синтаксис выглядит следующим образом:

{
    "Конфигурация хоста": {
        "Связывает": [
            "/устройство:/устройство"
        ],
        «Привязки портов»: {
            "80/TCP": [
                {
                    "ХостПорт": "5000"
                }
            ]
        },
        "Привилегированный": правда
    }
}

После решения все заработало как положено.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.