2017-04-16 103 views
1

我想根据安装的可移动USB磁盘动态地改变容器中的目录内容umounting可移动驱动器后保持不变。为了实现这一点,我做了以下步骤。内容在容器的绑定安装目录安装/从主机

  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. 安装U盘到主机。执行mount /dev/sdxY /mnt命令。主机上的/mnt目录现在包含存储在可移动USB磁盘上的文件和目录。

  4. 再次检查内容的容器。容器中的/share目录仍为空。根本没有任何改变。

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

做码头工人,有一些机制来保持整个容器的内容同步和主机I加载/卸载磁盘后。


泊坞窗信息:

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 

回答

1

对不起

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

更多文档,我已故的职位。在docker的官方github页面上创建问题后。 @ cpuguy83给了我答案。 https://github.com/moby/moby/issues/32512

要使安装操作传播到容器,请将slave标志附加到-v选项。 e.g:

-v media/usb:/smb_share:slave 

欲了解更多信息,请HERE

1

您可以使用--device选项容器内直接访问USB设备。可在https://docs.docker.com/engine/reference/commandline/run/#add-host-device-to-container---device

+0

我试着用'--device'选项但失败。在将USB电缆插入主机之前,'/ dev'中没有适当的设备文件,例如'/ dev/sdb'。如果我首先连接USB电缆,然后使用'--device =/dev/sdb1'运行容器,则在从主机断开USB电缆后,设备仍然存在事件。 –

+0

这篇文章将帮助你http://stackoverflow.com/questions/24225647/docker-any-way-to-give-access-to-host-usb-or-serial-device –

+0

我用'搬运工运行测试 - 它--rm --privileged -v/dev/bus/usb:/ dev/bus/usb ubuntu bash',如果我在容器运行之前将其插入,则无法识别USB闪存驱动程序。 –