【问题标题】:Contents in the container's bind-mounted dir keep unchanged after mounting/umounting removable drive from the host从主机挂载/卸载可移动驱动器后,容器的绑定挂载目录中的内容保持不变
【发布时间】:2017-09-12 00:28:45
【问题描述】:

我想根据挂载的可移动U盘动态更改容器目录中的内容。为此,我执行以下步骤。

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

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

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

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

如果我反过来这样做:1)首先将USB磁盘挂载到主机,2)运行容器,3)卸载USB磁盘。容器中的内容保持不变,但是主机上的/mnt目录被扫了。

在我挂载/卸载磁盘后,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

【问题讨论】:

    标签: docker filesystems mount


    【解决方案1】:

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

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

    -v media/usb:/smb_share:slave
    

    欲了解更多信息,请查看HERE

    【讨论】:

      【解决方案2】:

      您可以使用 --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

      【讨论】:

      • 我尝试使用--device 选项但失败了。在将 USB 线插入主机之前,/dev 中没有正确的设备文件,例如/dev/sdb。如果我先连接 USB 电缆,然后使用 --device=/dev/sdb1 运行容器,则在我断开 USB 电缆与主机的连接后,设备仍然存在。
      • 这篇文章对你有帮助stackoverflow.com/questions/24225647/…
      • 我用docker run -it --rm --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash测试过,如果我在容器运行前插上USB闪存驱动程序就无法识别。
      猜你喜欢
      • 1970-01-01
      • 2020-09-20
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多