Docker-способ предоставить доступ к хосту USB или последовательному устройству?


3 71

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.