mounting/umounting 个可移动驱动器从主机移除后,容器的绑定挂载目录中的内容保持不变
Contents in the container's bind-mounted dir keep unchanged after mounting/umounting removable drive from the host
我想根据挂载的移动U盘动态改变容器目录下的内容。为此,我执行以下步骤。
运行 带有-v
选项的容器,将宿主目录(/mnt
)挂载到容器(/share
)中。假设新容器的名称是test。该命令应类似于 docker run --name test -d -v /mnt:/share ubuntu:latest
.
通过docker exec -it test /usr/bin/bash
检查内容。目前,/share
是空的。
挂载U盘到主机。执行 mount /dev/sdxY /mnt
命令。主机上的 /mnt
目录现在包含存储在可移动 USB 磁盘上的文件和目录。
再次检查容器中的内容。容器中的 /share
目录仍然是空的。什么都没有改变。
如果我反过来做:1)首先将U盘挂载到主机,2)运行容器,3)卸载U盘。容器keep中的内容保留,但主机上的/mnt
目录被清除。
Do docker 有一些机制可以在 mount/umount 磁盘后保持容器和主机的内容同步。
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
提供更多文档
抱歉我迟到了 post。在 docker 的官方 github 页面上创建问题后。 @cpuguy83 给了我答案。 https://github.com/moby/moby/issues/32512.
要使挂载操作传播到容器,请将 slave
标志附加到 -v
选项。例如:
-v media/usb:/smb_share:slave
有关详细信息,请查看 HERE。
我想根据挂载的移动U盘动态改变容器目录下的内容。为此,我执行以下步骤。
运行 带有
-v
选项的容器,将宿主目录(/mnt
)挂载到容器(/share
)中。假设新容器的名称是test。该命令应类似于docker run --name test -d -v /mnt:/share ubuntu:latest
.通过
docker exec -it test /usr/bin/bash
检查内容。目前,/share
是空的。挂载U盘到主机。执行
mount /dev/sdxY /mnt
命令。主机上的/mnt
目录现在包含存储在可移动 USB 磁盘上的文件和目录。再次检查容器中的内容。容器中的
/share
目录仍然是空的。什么都没有改变。
如果我反过来做:1)首先将U盘挂载到主机,2)运行容器,3)卸载U盘。容器keep中的内容保留,但主机上的/mnt
目录被清除。
Do docker 有一些机制可以在 mount/umount 磁盘后保持容器和主机的内容同步。
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
提供更多文档抱歉我迟到了 post。在 docker 的官方 github 页面上创建问题后。 @cpuguy83 给了我答案。 https://github.com/moby/moby/issues/32512.
要使挂载操作传播到容器,请将 slave
标志附加到 -v
选项。例如:
-v media/usb:/smb_share:slave
有关详细信息,请查看 HERE。