将串行USB设备暴露在容器中

时间:2020-06-29 17:11:33

标签: docker docker-machine

将USB设备(/dev/cu.usbserial)暴露给正在运行的Docker容器的最佳方法是什么?是否可以在容器内将设备别名为另一个名称,类似于端口映射的工作方式?我正在尝试从容器读取和写入串行设备(闪存固件),因为我在容器中拥有所有工具。我在下面概述了到目前为止我已经尝试过的所有内容。

试用1:使用--device

使用--device选项,我收到错误消息:docker: Error response from daemon: error gathering device information while adding custom device "/dev/cu.usbserial": no such file or directory

试用2:使用--mount--volume

在首选项下为文件共享添加/dev路径后,我尝试了以下命令:

docker run -it --rm --volume $(pwd):/home/app/ --volume /dev/cu.usbserial:/dev/cu.usbserial --entrypoint "/bin/bash" container:tag

但是此命令实际上永远挂起。并使用下面的--mount类似物:

docker run -it --rm --volume $(pwd):/home/app/ --mount type=bind,source=/dev/cu.usbserial,target=/dev/cu.usbserial --entrypoint "/bin/bash" container:tag

我收到以下错误:Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /dev/cu.usbserial

试用3:使用符号链接

我还尝试将设备符号链接到我附加到容器的目录,但是容器无法遵循该链接。

编辑(29/6/2020)

正如@Peaceful James指出的那样,如果您的主机运行OSX,则当前没有解决此问题的方法。正在here跟踪该问题。

2 个答案:

答案 0 :(得分:2)

尝试以特权模式运行docker容器:

sudo docker run -it --rm --volume $(pwd):/home/app/ --privileged --entrypoint "/bin/bash" container:tag

有关详细信息,请参见此处:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

NB:这不适用于“ Docker for Mac”。看到这里:https://github.com/docker/for-mac/issues/900

答案 1 :(得分:0)

在特权模式下运行,无需卷挂载。特权模式将使容器对/ dev可见,而无需进行任何额外的装载。

sudo docker run -it --rm --privileged --entrypoint "/bin/bash" container:tag