Docker 绑定挂载目录中的文件未更新

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 暴露给容器,因此请小心处理。