在 docker 容器中公开 TTY 设备 docker for mac

Exposing a TTY device in a docker container with docker for mac

我正在尝试将插入我的 mac 的 Arduino 暴露给 linux 我在 Docker for Mac 中 运行 的实例(无虚拟机)。

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
root@8f18fdbcf64d:/# ls /dev/tty.*
ls: cannot access /dev/tty.*: No such file or directory

什么都没有暴露!

我正在使用它来公开串行设备以在 linux 中测试 serial drivers

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

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

前段时间有一个 issue 开放。请检查它是否解决了您的问题

这里的问题很大程度上是因为您没有 运行 Docker mac。您是 运行 Mac 上的 Linux 虚拟机,您在其中 运行 Docker。这意味着将 Linux VM 内的 /dev 树暴露给 Docker 很容易,但是从 Mac 暴露设备就不太容易了,缺少来自管理程序。

使用围绕 VirtualBox 构建的遗留 "Docker Toolbox" for Mac,应该可以将 USB 设备分配给 VirtualBox 主机 运行 Docker (这反过来又允许你将它暴露给你的 Docker 容器)。

This GitHub issue 讨论了这种特殊情况并提供了有用文档的链接。

我不知道在较新的 "Docker for Mac" 软件包中使用的管理程序当前是否提供此类功能。