用docker for mac暴露Docker容器中的TTY设备

问题描述:

我试图将我插入到我的mac中的Arduino暴露给我在Docker for Mac(no vm)中运行的linux实例。用docker for mac暴露Docker容器中的TTY设备

Arduino公开自己为/dev/tty.usbserialXXX。我使用的是基于Ubuntu的node docker镜像。

我跑的命令是

$ docker run --rm -it -v `pwd`:/app --device /dev/tty.usbmodem1421 node bash 
docker: Error response from daemon: linux runtime spec devices: error gathering device information while adding custom device "/dev/tty.usbmodem1421": lstat /dev/tty.usbmodem1421: no such file or directory. 

如果我尝试使用--privileged

$ docker run --rm -it -v `pwd`:/app --device /dev/tty.usbmodem1421 --privileged node bash 
[email protected]:/# ls /dev/tty.* 
ls: cannot access /dev/tty.*: No such file or directory 

没有暴露!

我使用这个来暴露串口设备在linux下测试serial drivers

+0

也在github上跟踪这个https://github.com/docker/for-mac/issues/900 – reconbot

这里的问题很大程度上是因为您没有在您的mac上运行Docker 。您正在Mac上运行Linux VM,其中您正在运行Docker。这意味着将Linux VM内的/dev树公开给Docker很容易,但是如果缺少来自管理程序的某种支持,则从Mac公开设备的难度会更小。

使用基于VirtualBox构建的Mac的传统“Docker Toolbox”,应该可以将USB设备分配给运行Docker的VirtualBox主机(这将允许您将其暴露给Docker容器)。

This GitHub issue谈论这种特殊情况,并链接到有用的文档。

我不知道这种功能目前是否适用于较新的“Docker for Mac”软件包中使用的管理程序。

+0

有没有VM“Docker for Mac” – reconbot

+1

还有!我鼓励你仔细阅读[文档](https://blog.docker.com/2016/03/docker-for-mac-windows-beta/),特别是那些说“Docker引擎运行在在Mac OS X上的xhyve虚拟机之上的Alpine Linux发行版“。 OS X以前的Docker用于使用VirtualBox,但最近已切换到xhyve,但在两种情况下,它仍然在Linux VM中运行,因为这是Docker本机运行的唯一平台。 – larsks

/dev/tty.usbserialXXX列出的Arduino设计可能是设备的符号链接,而不是实际的路径。要阅读符号链接路径尝试使用

docker run --rm -it -v `pwd`:/app --device=/dev/$(readlink /dev/tty.usbmodem1421) node bash 

有一个issue打开这一段时间回来。请检查它是否可以解决您的问题