使用--device flag

时间:2016-01-28 21:01:55

标签: linux docker usb device mknod

我正在使用以下选项运行容器: docker run -d --device = / dev / bus / usb:/ dev / bus / usb --device = / dev / ttyS0:/ dev / ttyS0 instr_img

在容器内部,我有一个Python代码,它会重置USB设备,从而导致设备文件在' / dev / bus / usb / 002/005'在要删除的主机上,并在其位置创建一个新文件(/ dev / bus / usb / 002/006)。问题是在容器内部/ dev / bus / usb / 002/005'仍然存在,&#39 / / 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用于这个用例,因为我使用Docker非常绿色(一个菜鸟)。 一些有经验的Docker用户的一些评论/见解真的很值得赞赏。如果我找不到解决这个问题的简洁方法,那么对我来说这可能是一个让我无法解决这个问题的交易。

提前感谢您的评论!

1 个答案:

答案 0 :(得分:0)

从网上的所有研究和使用'--device'的一些实验中,我发现此选项不支持短暂(热插拔)设备。令人遗憾的是,如果有的话,Docker文档没有明确说明这一点。我只是在线阅读了一条评论的用户。对于那些想要为这些设备使用“--device”的人,请不要;使用'--privileged'& '-v'选项代替。这样可以避免您必须指定确切的设备文件名,例如/ dev / bus / usb / 002/088,你可以只指定/ dev / bus / usb。 '--device'选项需要实际的设备文件名才能工作。