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

时间:2018-07-03 06:56:20

标签: docker serial-port

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

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

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吗?

1 个答案:

答案 0 :(得分:0)

最后,我自己动手做。

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中,现在有了卷容器和主机,彼此就可以知道使用了哪个串行。