Не удается смонтировать USB-устройство с докер-контейнером на Linux.

Вопрос или проблема

Я не могу сопоставить мое USB-устройство с контейнером Docker.

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 nov 27 09:28 /dev/ttyUSB0
$ groups
adm dialout sudo audio kvm lpadmin docker

Я сопоставил устройство ttyUSB0 в моем файле docker compose:

    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0

И вот ошибка, когда я запускаю контейнер:

$ docker compose up
Error response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0": no such file or directory

Если я добавляю параметр привилегий в файл compose, я могу запустить контейнер, но получаю эту ошибку, когда используется последовательный порт:

    priviliged: true
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0

И вот ошибка:

File "/usr/local/lib/python3.10/site-packages/serial/serialposix.py", line 325, in open
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'

Если я запускаю docker compose up с sudo, все работает правильно, поэтому я думаю, что это просто проблема с разрешениями.

Я не могу понять, как правильно сопоставить USB-устройство с контейнером.

У меня была та же проблема. Я использовал Docker Desktop. Я решил ее, удалив Docker Desktop и установив Docker Engine.

Ответ или решение

Как решить проблему с маппингом устройства USB с контейнером Docker на Linux

Вы столкнулись с проблемой маппинга USB устройства с контейнером Docker, что является распространённой задачей для тех, кто интегрирует аппаратные средства с контейнеризированными приложениями. Давайте рассмотрим, как можно решить вашу ситуацию.

Проблема

Судя по вашему описанию, основная проблема заключается в том, что контейнер Docker не может найти устройство /dev/ttyUSB0, даже несмотря на то, что оно должным образом указано в файле docker-compose. Ошибка, которую вы видите (Error response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0": no such file or directory), обычно возникает из-за проблем с правами доступа или конфигурацией. Кроме того, выполнение команды с sudo решает проблему, это подтверждает предположение, что дело в правах доступа.

Возможные решения

  1. Проверка групп доступа и прав на устройстве:
    Убедитесь, что пользователь Docker имеет необходимые права доступа для работы с устройством /dev/ttyUSB0. Команда ls -l /dev/ttyUSB0 показывает, что устройство принадлежит группе dialout. Хотя вы являетесь частью этой группы, Docker может использовать другие параметры доступа.

    sudo usermod -aG dialout <username>

    После применения команды выше, выполните перезагрузку или выйдите из системы и зайдите снова.

  2. Корректировка файла docker-compose:
    Проверьте правильность вашего файла docker-compose.yml. Он должен содержать секцию devices, как у вас, и важно убедиться, что путь реально совпадает с тем, что отдает ls -l.

  3. Запуск Docker без sudo:
    Убедитесь, что Docker демон (daemon) работает от имени пользователя с достаточными правами, чтобы взаимодействовать с устройствами. Попробуйте добавить пользователя в группу docker, если это еще не было сделано.

    sudo usermod -aG docker <username>

    После этого, снова перезагрузите систему.

  4. Использование опции privileged:
    Хотя это работает, запуск контейнера с опцией privileged: true может быть небезопасным. Это даёт контейнеру доступ ко всей системе, что может быть лишним для вашего случая.

  5. Использование других подходов:
    Если всё ещё получаете ошибки: попробуйте напрямую запускать с docker run для тестирования. Это поможет исключить проблемы с конфигурацией в docker-compose.yml.

    docker run --rm -it --device=/dev/ttyUSB0:/dev/ttyUSB0 <image_name>

Заключение

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

Если указанная выше информация не решает вашу проблему, рассмотрите возможность обновления Docker или обратитесь к документации для конкретных версий Docker и системных конфигураций.

Оцените материал
Добавить комментарий

Капча загружается...