Docker-способ предоставить доступ к хосту USB или последовательному устройству?
последний раз, когда я проверял,у Docker не было никаких средств для предоставления доступа к контейнеру для последовательного хоста или USB-порта. Есть трюк, который позволяет это делать?
3 ответа:
есть несколько вариантов. Прежде всего, как отмечено @Mark ниже, Docker версии 1.2.0 (выпущен 2014/08) добавил
--device
флаг, который можно использовать для доступа к USB-устройствам без--privileged
режим:docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
альтернативно, предполагая, что ваше USB-устройство доступно с драйверами, работающими и т. д. на хосте в
/dev/bus/usb
, вы можете установить это в контейнер с помощью привилегированный режим и опции томов. Например:docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash
с текущими версиями Docker, вы можете использовать
--device
флаг для достижения того, что вы хотите, без необходимости предоставлять доступ ко всем устройствам USB.например, если вы хотите сделать только
/dev/ttyUSB0
доступный в вашем контейнере Docker, вы можете сделать что-то вроде:docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
Я хотел расширить уже данные ответы, чтобы включить поддержку динамически подключенных устройств, которые не захватываются с
/dev/bus/usb
и как заставить это работать при использовании хоста Windows вместе с виртуальной машиной boot2docker.если вы работаете с Windows, вам нужно будет добавить любые правила USB для устройств, к которым вы хотите получить доступ Docker в диспетчере VirtualBox. Для этого вы можете остановить виртуальную машину, работает:
host:~$ docker-machine stop default
Откройте Диспетчер VirtualBox и добавьте Поддержка USB с фильтрами по мере необходимости.
запустите виртуальную машину boot2docker:
host:~$ docker-machine start default
поскольку USB-устройства подключены к виртуальной машине boot2docker, команды должны выполняться с этой машины. Откройте терминал с виртуальной машиной и запустите команду docker run:
host:~$ docker-machine ssh docker@default:~$ docker run -it --privileged ubuntu bash
Примечание, когда команда выполняется так, то захватываются только ранее подключенные USB-устройства. Флаг Тома требуется только в том случае, если вы хотите, чтобы это работало с подключенными устройствами после запуска контейнера. В этом случае, вы можете использовать:
docker@default:~$ docker run -it --privileged -v /dev:/dev ubuntu bash
обратите внимание, я должен был использовать
/dev
вместо/dev/bus/usb
в некоторых случаях, чтобы захватить устройство, как/dev/sg2
. Я могу только предположить, что то же самое будет верно для таких устройств, как/dev/ttyACM0
или/dev/ttyUSB0
.команды запуска docker также будут работать с хостом Linux.