2016-01-28 4 views
2

Я запускаю контейнер со следующими параметрами: docker run -d --device =/dev/bus/usb:/dev/bus/usb --device =/dev/ttyS0:/dev/ttyS0 instr_imgНовый узел устройства, созданный на хосте, не находит отражение в контейнере Docker при использовании --device flag

Внутри контейнера У меня есть код Python, который сбрасывает USB-устройство, которое, в свою очередь, вызывает файл устройства в '/ dev/bus/usb/002/005 'на удаляемом хосте, и вместо него создается новый файл (/ dev/bus/usb/002/006). Проблема в том, что внутри контейнера '/ dev/bus/usb/002/005' все еще существует, а '/ dev/bus/usb/002/006' не существует. Каталоги/dev/bus/usb/002 'на хосте и контейнере теперь не синхронизированы. В результате выполнение кода внутри контейнера выдает исключение, поскольку оно не может разговаривать с USB-устройством. Я подтвердил вручную создание нового файла устройства (mknod) в контейнере и увидел, что он не синхронизируется с хостом и наоборот. Это неподдерживаемая функция или ошибка в Docker?

>docker version 
Client: 
Version: 1.9.0 
API version: 1.21 
Go version: go1.4.2 
Git commit: 76d6bc9 
Built: Tue Nov 3 17:48:04 UTC 2015 
OS/Arch: linux/amd64 

Server: 
Version: 1.9.0 
API version: 1.21 
Go version: go1.4.2 
Git commit: 76d6bc9 
Built: Tue Nov 3 17:48:04 UTC 2015 
OS/Arch: linux/amd64 

>docker info 
Containers: 66 
Images: 313 
Server Version: 1.9.0 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 445 
Dirperm1 Supported: true 
Execution Driver: native-0.2 
Logging Driver: json-file 
Kernel Version: 3.19.0-47-generic 
Operating System: Ubuntu 15.04 
CPUs: 4 
Total Memory: 7.69 GiB 
Name:my-host-1 
ID: VIT4:S2P3:Q4TY:A3I4:L4WH:HFWJ:I36U:PBTV:B3VW:NFXB:LDNM:KY7G 
Username: myuser 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 

>uname -a 
Linux my-host-1 3.19.0-47-generiC#53-Ubuntu SMP Mon Jan 18 14:02:48 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 

Мой обходной путь, чтобы выдать MKNOD команду, чтобы создать новый файл устройства с младшим номером устройства увеличивается на 1 (по сравнению с предыдущим номером) каждый раз, когда сброс устройства происходит; однако это не чистый взломать, так как мне нужно выполнить некоторые проверки, потому что эта программа используется в нескольких средах снаружи и внутри контейнера Docker. Я вполне мог не использовать Docker правильно для этого варианта использования, так как я очень зеленый (noob) с Docker. Некоторые комментарии/идеи некоторых опытных пользователей Docker действительно будут оценены. Это может быть нарушителем транзакций для меня, чтобы докеретировать эту программу, если я не могу найти обходной путь для этой проблемы.

Заранее благодарим за ваши комментарии!

ответ

0

Из всех исследований в Интернете и некоторых экспериментов с использованием «-device» я обнаружил, что эти эфемерные (горячие подключаемые) устройства не поддерживаются этой опцией. Жаль, что документация Docker не указала это четко, если вообще. Я только прочитал один комментарий онлайн от пользователя, который упомянул об этом попутно. Для тех, кто хочет использовать «-device» для этих устройств, не делайте этого; вместо этого используйте опцию '--privileged' & '-v'. Это позволит вам не указывать точное имя файла устройства, например./dev/bus/usb/002/088, вместо этого вы можете указать только/dev/bus/usb. Для параметра «-device» требуется, чтобы фактическое имя файла устройства работало.

 Смежные вопросы

  • Нет связанных вопросов^_^