代码之家  ›  专栏  ›  技术社区  ›  atline

如何避免docker主机和docker容器同时访问串行端口?

  •  1
  • atline  · 技术社区  · 6 年前

    在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! ,它是随机的。

    不管怎样,似乎两个minicom将竞争获取串行端口的内容。

    任何使行为与在主机中相同的建议都会说,如果我在主机中打开串行端口,则在容器中打开。我能得到 设备/dev/ttyacm0已锁定 在集装箱里,如果可能的话?

    1 回复  |  直到 6 年前
        1
  •  0
  •   atline    6 年前

    最后,我自己动手了。

    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中,现在有了卷容器&主机就可以知道使用的是哪个序列号。