用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。
答
这里的问题很大程度上是因为您没有在您的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”软件包中使用的管理程序。
答
在/dev/tty.usbserialXXX
列出的Arduino设计可能是设备的符号链接,而不是实际的路径。要阅读符号链接路径尝试使用
docker run --rm -it -v `pwd`:/app --device=/dev/$(readlink /dev/tty.usbmodem1421) node bash
有一个issue打开这一段时间回来。请检查它是否可以解决您的问题
也在github上跟踪这个https://github.com/docker/for-mac/issues/900 – reconbot