如何避免docker host和docker container同时访问串口?



在linux主机中,我可以使用minicom -D /dev/ttyACM0 -b 115200打开一个串口,如果我在另一个终端中执行上述命令,它将显示Device /dev/ttyACM0 is locked。以上是我预期的行为。

但是如果我在主机中执行minicom -D /dev/ttyACM0 -b 115200,然后使用 next 命令启动容器:

docker run --privileged -idt --name test -v /dev:/dev -v /etc/apt:/etc/apt ubuntu:16.04

在容器中,我执行minicom -D /dev/ttyACM0 -b 115200,它将显示我成功打开串口。

那么现象是:如果串口打印一些信息:例如Hello world!.主机中的minicom可能会Hello获取内容,而容器中的minicom可能会world!获取内容,它是随机的。

无论如何,似乎两个小公司将竞相抢夺串口的内容。

任何使行为与主机相同的建议,说如果我在主机中打开串行端口,然后在容器中打开。如果可能的话,我可以在容器中获取Device /dev/ttyACM0 is locked

最后,我自己得到了它的工作。

docker run --privileged -idt --pid=host --name test -v /var/lock:/var/lock -v /dev:/dev -v /etc/apt:/etc/apt ubuntu:16.04

minicom 将其锁定文件放在/var/lock 中,现在使用卷容器和主机可以相互知道使用哪个串行。

最新更新