Puncte:0

Aplicația Docker nu găsește întotdeauna porturi seriale în Ubuntu 20.04

drapel jp

Sunt ocupat cu o aplicație de tip IoT care necesită hardware fizic conectat printr-un port serial. Am optat să folosim arhitectura Azure IoT Edge pentru a implementa aplicația pe PC-ul care există on-premise. Acest lucru ajută la ciclul nostru DevOps.

Pentru a utiliza Azure IoT Edge necesită ca aplicația noastră să fie containerizată și, prin urmare, expunerea porturilor seriale poate fi o provocare. PC-ul este pe 64 de biți și rulează Ubuntu 20.04 și are mai multe porturi USB, seriale și LAN la care putem conecta dispozitivele.

Am urmărit acest minunat tutorial de la Losant pentru a configura asta.

Opțiunile noastre de creare a containerelor arată astfel:

{
  „HostConfig”: {
    „PortBindings”: {
      „80/tcp”: [
        {
          „HostPort”: „5000”
        }
      ]
    },
    „Privilegiat”: adevărat,
    „Volume”: {
      „/dev”: {}
    }
  }
}

Mapăm aplicația portul 80 al aplicației noastre la portul 5000 de pe PC și setăm eticheta Volumes and Privileged așa cum este sugerat în linkul tutorial de mai sus.

Dispozitivul în sine este conectat prin USB și, prin urmare, a trebuit să instalăm un driver pe Ubuntu 20.04 de la Site-ul FTDI.

Intrebarea mea:

În unele cazuri, aplicația noastră va găsi portul serial (tty/USB0), dar în cele mai multe cazuri nu va găsi. Dacă pornim computerul cu dispozitivul conectat, aplicația găsește de obicei dispozitivul. Cum putem schimba configurarea PC-ului / configurarea dockerului / configurarea aplicației, astfel încât acesta să găsească întotdeauna dispozitivul?

NOTĂ: Aceasta este o duplicare a această întrebare pe StackOverflow, deoarece nu eram sigur dacă întrebarea aparține acolo sau aici.

drapel in
Când containerul Docker nu găsește dispozitivul conectat, care este ieșirea Terminalului lui `sudo lsusb`? Mă întreb dacă dispozitivul este preluat dintr-o altă locație de pe magistrala USB sau deloc.
itstudes avatar
drapel jp
După ce rulez acea comandă, primesc: „Bus 002 Dispozitiv 001: ID 1d6b:0003 Linux Foundation 3.0 root hub” „Bus 001 Dispozitiv 003: ID 0403:6015 Future Technology Devices International, Ltd Bridge (I2C/SPI/UART/FIFO)” „Bus 001 Dispozitiv 002: ID 15a2:0300 Freescale Semiconductor, Inc. ADP102 SERIAL DIO” „Bus 001 Dispozitiv 001: ID 1d6b:0002 Linux Foundation 2.0 root hub” Dispozitivul 003 arată ca dispozitivul FTDI, așa că pare să apară la nivel de PC.
drapel in
Când rulați `docker info`, vedeți `Udev Sync Supported: true`? Dacă acest lucru este fals, atunci dispozitivului USB va trebui să i se atribuie întotdeauna același ID de dispozitiv, ceea ce nu este întotdeauna posibil, deoarece acestea sunt distribuite pe baza unor factori diferiți, cum ar fi timpul de încălzire...
itstudes avatar
drapel jp
Deci [tutorialul de la Losant](https://www.losant.com/blog/how-to-access-serial-devices-in-docker) de mai sus vorbește despre acele reguli udev. Deci cred că ai dreptate în privința asta.Am rulat comanda `docker info` și nu am putut vedea nimic de-a face cu setările Udev. Cred că formatul meu pentru „Volume” nu este chiar corect în secțiunea de cod de mai sus. Mă uitam la [acest link docker pe Volumes](https://docs.docker.com/storage/volumes/#start-a-container-with-a-volume) și cred că ar trebui să folosești „Mounts ". Odată ce am format corect, sper că lucrurile vor funcționa corect.
Puncte:0
drapel jp

Aceasta a fost de fapt doar o nefericită utilizare greșită a sintaxei pentru volume. Acest link docker a fost de ajutor.

Sintaxa rezolvată este următoarea:

{
    „HostConfig”: {
        „Leagă”: [
            „/dev:/dev”
        ],
        „PortBindings”: {
            „80/tcp”: [
                {
                    „HostPort”: „5000”
                }
            ]
        },
        „Privilegiat”: adevărat
    }
}

După ce am rezolvat, totul a funcționat conform așteptărilor.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.