Jet*_*kov 6 ubuntu device udev pyserial docker
我正在使用 docker bind mount 来映射/dev/serial/
由 Ubuntu 生成的主机文件夹(其中包含到串行设备的标识符号链接,例如/dev/ttyUSB0
)。我正在使用的完整 docker 容器运行命令是
docker run -d --restart always --privileged=true -v /dev/serial:/dev/serial DOCKER_IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)
这在第一次运行时工作正常,但是如果串行设备断开连接并重新连接,符号链接将重新创建。此更改不会传播到 docker 容器中,而是 docker 容器找到一个空/dev/serial
文件夹。我在主机上和此目录中的 docker 容器中手动创建了一个文件进行了测试,奇怪的是,在这两种情况下,另一个的更改都没有更新。
体积显示为
{
"Type": "bind",
"Source": "/dev/serial",
"Destination": "/dev/serial",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
Run Code Online (Sandbox Code Playgroud)
编辑:Ubuntu 在两个目录中by-path
和文件夹by-id
下创建符号链接/dev/serial
。
cod*_*ion 13
绑定挂载基于 inode,当文件被删除并重新创建时,绑定挂载就会被破坏。这些更改不会传播到绑定挂载,直到容器重新启动以选择新的 inode。
这种情况下(删除并重新创建文件)的解决方案是挂载父目录,因此在您的情况下,您可以使用-v /dev:/dev
. 当然,这会将 /dev 暴露给容器,因此请小心处理。