尝试挂载/卸载 USB 驱动器,以便在 Docker 容器运行时可以看到它们的内容

尝试挂载/卸载 USB 驱动器,以便在 Docker 容器运行时可以看到它们的内容

我想挂载和卸载 USB 驱动器,以便在 Docker 容器运行时可以从容器内部看到它们的内容。我已将目录映射到将挂载 USB 驱动器的容器。

问题:

  • 如果在安装 USB 驱动器之前启动了容器,则 d​​ocker 容器无法看到安装到其卷映射文件夹的文件夹/文件。
  • 如果在挂载 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

相关内容