将USB设备(/dev/cu.usbserial
)暴露给正在运行的Docker容器的最佳方法是什么?是否可以在容器内将设备别名为另一个名称,类似于端口映射的工作方式?我正在尝试从容器读取和写入串行设备(闪存固件),因为我在容器中拥有所有工具。我在下面概述了到目前为止我已经尝试过的所有内容。
--device
使用--device
选项,我收到错误消息:docker: Error response from daemon: error gathering device information while adding custom device "/dev/cu.usbserial": no such file or directory
。
--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
。
我还尝试将设备符号链接到我附加到容器的目录,但是容器无法遵循该链接。
正如@Peaceful James指出的那样,如果您的主机运行OSX,则当前没有解决此问题的方法。正在here跟踪该问题。
答案 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