从主机挂载/卸载可移动驱动器后,容器绑定安装目录中的内容保持不变

我想根据已安装的可移动USB磁盘dynamic更改容器目录中的内容。 要做到这一点,我做了以下步骤。

  1. 使用-v选项运行容器,该选项将主机目录( /mnt )装载到容器( /share )中。 假设新容器的名称是testing 。 该命令应该像docker run --name test -d -v /mnt:/share ubuntu:latest

  2. 通过docker exec -it test /usr/bin/bash检查内容。 目前, /share是空的。

  3. 将USB磁盘挂载到主机上。 执行mount /dev/sdxY /mnt命令。 主机上的/mnt目录现在包含存储在可移动USB磁盘上的文件和目录。

  4. 再次检查容器中的内容。 容器中的/share目录仍然是空的。 一切都没有改变。

如果我这样做的话:1)首先将U盘安装到主机上,2)运行容器,3)卸下U盘。 容器中的内容保持不变,但主机上的/mnt目录被扫描。

在装载/卸载磁盘之后,docker是否有一些机制来保持容器和主机之间的内容同步。


docker信息:

 Containers: 2 Running: 2 Paused: 0 Stopped: 0 Images: 1 Server Version: 17.03.1-ce Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 14 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe init version: 949e6fa Security Options: apparmor seccomp Profile: default Kernel Version: 4.8.0-46-generic Operating System: Ubuntu 16.04.2 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.684 GiB Name: tri-xps ID: LMPY:EGYU:QUAF:DPUF:GZNR:AHFS:URFD:EFW3:5DFV:WHR3:NAYJ:PKQV Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No swap limit support Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false 

您可以使用–device选项直接在容器内访问USB设备。

 docker run -t -i --device=/dev/ttyUSB0 ubuntu bash 

更多文档可在https://docs.docker.com/engine/reference/commandline/run/#add-host-device-to-container—device

对不起,我的晚帖。 在docker的官方github页面上创build一个问题后。 @ cpuguy83给了我答案。 https://github.com/moby/moby/issues/32512

要使装载操作传播到容器,请将slave标志附加到-v选项。 例如:

 -v media/usb:/smb_share:slave 

欲了解更多信息,请点击这里 。