Как подключить USB-устройство к Windows с Docker Desktop и передать его в Linux-контейнер Docker?

Как подключить USB-устройство J-Link к Docker-контейнеру в Windows 11 с WSL2

Многие разработчики сталкиваются с задачей подключения USB-устройств, таких как J-Link, к Docker-контейнерам, запущенным на Windows. В данной статье мы рассмотрим, как организовать работу с USB-устройством SEGGER J-Link через Docker в среде Windows 11 с WSL2 и Ubuntu 24.04.


Проблема подключения USB-устройства в Docker на Windows 11

При работе с Docker в Windows 11, особенно с использованием подсистемы WSL2, возникает сложность при передаче USB-устройств внутрь контейнера. Для примера возьмём USB-программатор J-Link PLUS, который успешно определяется в WSL Ubuntu 24.04:

bash
Bus 001 Device 002: ID 1366:0101 SEGGER J-Link PLUS

Однако при выполнении команды lsusb внутри самого Docker-контейнера устройство не отображается. Это связано с ограничениями Docker Desktop в поддержке прямого USB passthrough.


Как устроена работа с USB-подключениями в WSL2 и Docker

На Windows 11 с включённым и обновлённым WSL2, устройство корректно определяется на уровне Ubuntu 24.04, установленном в WSL. Для доступа к USB в Windows используется утилита usbipd-win, позволяющая "расшарить" USB-устройство и "прикрепить" его к WSL.

Команды в PowerShell для присоединения USB-устройства выглядят так:

powershell
usbipd.exe wsl list
usbipd.exe wsl attach —busid —name

Тем не менее, доступ к USB-устройствам из Docker-контейнера, запущенного внутри WSL, требует дополнительных шагов.


Ограничения Docker Desktop для USB passthrough

Официальная документация Docker Desktop подчёркивает, что прямой USB passthrough не поддерживается:

"Docker Desktop does not support direct USB device passthrough. However, you can use USB over IP to connect common USB devices to the Docker Desktop VM and in turn be forwarded to a container."

Это означает, что встроенной возможности проброса USB из Windows в Docker нет. Вместо этого предлагается использовать технологию USB/IP – передачу USB-устройств по IP-сети, чтобы подключить устройство к виртуальной машине, а затем "поделиться" им с контейнером.


Использование USB/IP для передачи J-Link в Docker-контейнер

Для обхода описанного ограничения стоит воспользоваться следующими рекомендациями:

  1. Установить и настроить usbipd-win на стороне Windows, что позволит "выдать" USB-устройство в WSL2.
  2. Настроить соответствующий USB/IP клиент внутри WSL2 (Ubuntu 24.04), чтобы устройство отображалось в системе.
  3. Запустить Docker-контейнер и пробросить USB-устройство внутрь контейнера через volume bind или работу с устройствами внутри WSL.

Подробная инструкция по USB/IP:

  • Запуск usbipd с правами администратора в Windows.
  • Использование usbipd.exe для списка и прикрепления устройств.
  • В Linux устанавливается пакет usbip и запускаются сервисы для поддержки USB устройств.

Рекомендуемое решение: Docker внутри полноценной Linux VM на Hyper-V

В случае, если работа с USB в WSL2 и Docker на Windows становится слишком сложной, альтернатива – использовать полноценную Linux виртуальную машину с Hyper-V, внутри которой запускается Docker.

Преимущества такого подхода:

  • Полноценная поддержка USB passthrough в Hyper-V.
  • Отсутствие ограничений Docker Desktop на Windows.
  • Упрощённое управление USB-устройствами в Linux-среде.

Заключение

Подключение USB-устройства SEGGER J-Link к Docker-контейнеру в Windows 11 через WSL2 требует дополнительной настройки, поскольку Docker Desktop не поддерживает прямой USB passthrough. Использование технологии USB/IP и usbipd-win позволяет "расшарить" устройство, но наиболее надёжным и простым решением станет запуск Docker внутри Linux виртуальной машины на базе Hyper-V с поддержкой USB passthrough.

Если вы планируете регулярно работать с USB-устройствами в контейнерах, рекомендуем рассмотреть вариант с полноценной Linux средой для упрощения работы и минимизации технических сложностей.


Ключевые слова для SEO

Docker USB passthrough, подключение J-Link к Docker, usbipd-win Windows 11, WSL2 USB устройства, SEGGER J-Link в Docker, USB over IP Docker, Docker Desktop USB ограничения, Hyper-V USB passthrough.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *