我已经在macOS上通过USD连接了外部硬盘驱动器,并且正在运行Ubuntu的Docker容器,如下所示:
/>
docker run -it --device=/dev/disk3 --privileged ubuntu bash


这是另一种尝试:

# ls /dev/disk3
ls: cannot access '/dev/disk3': No such file or directory
# fdisk -l
Disk /dev/sda: 59.6 GiB, 63999836160 bytes, 124999680 sectors
Device     Boot Start       End   Sectors  Size Id Type
/dev/sda1  *     2048 124999679 124997632 59.6G 83 Linux


这是我要添加到设备中的设备容器(在macOS上报告):

$ docker run -it --device=/dev/disk3:/dev/sdb --privileged ubuntu bash
# ls /dev/sdb*
ls: cannot access '/dev/sdb*': No such file or directory
# fdisk -l
Disk /dev/sda: 59.6 GiB, 63999836160 bytes, 124999680 sectors
Device     Boot Start       End   Sectors  Size Id Type
/dev/sda1  *     2048 124999679 124997632 59.6G 83 Linux


类似的问题在这里发布:


如何访问USB驱动器从Docker容器内部在OSX主机上安装?
如何在Docker容器中安装要安装在主机上的主机设备?

但是,我无法将其安装在macOS主机上,因为分区是格式化为不支持的Linux文件系统(ext4)。这就是为什么我试图将设备传递到Linux Docker容器,但未显示该设备的原因。
我缺少了什么?

#1 楼

Docker是为Linux构建的,它通过轻量级管理程序HyperkIT在Mac上运行。这意味着Docker仅看到连接到hyperkit虚拟机管理程序的设备,而不是连接到Mac的设备。

不幸的是,Hyperkit的USB设备从MacOS传递到管理程序存在问题(请在此处了解更多),因此--device命令在这里对您没有多大用处。您有三个选择,

选择1:将ext4驱动器安装到Mac(不推荐)

虽然Mac本身不支持ext4,但是有一些解决方法。我已按照本教程在Mac上安装了ext4fuse。挂载设备后,请使用-v标志将其添加到ubuntu容器中,

docker run -v <Your_volume>:<dest_volume> -it ubuntu bash


确保已将卷目录添加到文件中在Docker中共享文件夹。

选项2:使用virtualbox驱动程序创建docker-machine并将设备添加到virtualbox vm(仍然不推荐)

按照此出色的教程进行操作

方法3:在Linux上运行Docker(推荐!)

我不推荐这样做使用适用于Mac的Docker。它是为linux构建的,如果您不切换到linux,您将无故浪费时间来解决此类问题。

我有一个Mac,但运行了一些ubuntu内核在virtualbox中安装docker,然后在它们之上安装docker,这样我也可以使用docker starm(除非使用docker-machine,否则您就无法使用docker Mac!

评论


为什么不建议使用选项2?在安全性方面,该解决方案与直接使用VirtualBox有何区别?

– Kubuntuer82
20 Mar 9 '20 at 14:54

#2 楼

根据GitHub上的@pgayvallet注释:



由于守护进程在Docker Desktop中的VM内运行,因此无法与VM内的容器实际共享mac主机设备,并且这绝对是不可能的。