我想挂载和卸载 USB 驱动器,以便在 Docker 容器运行时可以从容器内部看到它们的内容。我已将目录映射到将挂载 USB 驱动器的容器。
问题:
- 如果在安装 USB 驱动器之前启动了容器,则 docker 容器无法看到安装到其卷映射文件夹的文件夹/文件。
- 如果在挂载 USB 后启动容器,则可以看到文件,但是卸载并再次挂载将不会显示内容。
这是我尝试过的:
我将把 USB 安装到映射/some_folder/usb
到 Ubuntu 18.04 LTS(带有 4.15 内核)上的 docker 容器的目录。
启动一个容器,并将卷/some_folder
映射到其中同名的目录:
$ docker run --name mycontainer -it -v /some_folder:/some_folder ubuntu bash
从容器中分离(CTRL+P+Q),连接 USB 驱动器并以 root 身份将其挂载到主机目录:
$ mount /dev/sda1 /some_folder/usb/
安装选项:
$ mount | grep -i sda1
/dev/sda1 on /some_folder/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
验证是否有文件挂载到主机目录:
$ ls -al /some_folder/usb/
drwxr-xr-x 10 root root 8192 Jan 1 1970 .
drwxr-xr-x 3 root root 1024 Mar 13 16:44 ..
drwxr-xr-x 5 root root 8192 Jul 20 2018 files
进入容器,检查映射目录:
$ docker exec -it mycontainer bash
root@mycontainer# ls -al /some_folder/usb
容器内已安装文件夹的内容为空。
答案1
我知道这个问题已经很老了,但解决方案是使用绑定挂载并将“绑定传播”设置为“共享”。
例子:
docker run --name mycontainer -it --mount type=bind,source=/some_folder,target=/some_folder,bind-propagation=shared ubuntu bash
有关绑定传播的更多信息:https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation