gpt4 book ai didi

linux - 如何从 docker 容器内部访问 OSX 主机上的 USB 驱动器?

转载 作者:IT王子 更新时间:2023-10-29 00:37:39 30 4
gpt4 key购买 nike

我有一个应用程序,我最终想在云计算服务上运行(例如 AWSGoogle Cloud )打包在 docker 中图片。该应用程序需要在云中运行的原因是因为它旨在处理大数据文件,但在我实际部署之前,我想先在本地笔记本电脑上测试它,使用我拥有的单个大数据文件存储(用于测试和开发目的)在外部 USB 驱动器上。

我的开发机器是一台 OSX 笔记本电脑,我使用的是最新版本的 docker:

stachyra> uname -a
Darwin Andrews-MacBook-Pro-76.local 14.5.0 Darwin Kernel Version 14.5.0: Tue Sep 1 21:23:09 PDT 2015; root:xnu-2782.50.1~1/RELEASE_X86_64 x86_64
stachyra> docker --version
Docker version 1.10.2, build c3959b1

OSX 已将我的外部 USB 驱动器设备 /dev/disk2s2 挂载为 /Volumes/MGR DATA:

stachyra> df
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk1 974770480 435721376 538537104 45% 54529170 67317138 45% /
devfs 375 375 0 100% 650 0 100% /dev
map -hosts 0 0 0 100% 0 0 100% /net
map auto_home 0 0 0 100% 0 0 100% /home
/dev/disk2s2 3906291632 3869523640 36767992 100% 483690453 4595999 99% /Volumes/MGR DATA
/dev/disk3s1 196608 193160 3448 99% 24143 431 98% /Volumes/VirtualBox
stachyra> diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD *499.1 GB disk1
Logical Volume on disk0s2
DB70B91A-3B57-4C82-A758-C4BDEA4160FD
Unlocked Encrypted
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS MGR DATA 2.0 TB disk2s2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *100.7 MB disk3
1: Apple_HFS VirtualBox 100.7 MB disk3s1

还应注意,该驱动器有几个目录和数据在其中可见,至少在通过 OSX 直接查看时是这样:

stachyra> ls -l /Volumes/MGR\ DATA
total 0
drwxr-xr-x 6 stachyra staff 204 Apr 14 2015 1000genomes
drwxr-xr-x 5 stachyra staff 170 Oct 12 17:41 GIAB
drwxr-xr-x 4 stachyra staff 136 Apr 28 2015 genome_browser_tracks
drwxr-xr-x 24 stachyra staff 816 Oct 6 14:00 mitty

我已尝试遵循 this question 的建议,它描述了当 docker 在 linux 主机中运行时如何在 docker 中挂载 USB 驱动器。但是我本地的笔记本电脑是 OSX,不是 linux,所以它似乎不起作用。

明确地说,在尝试遵循 accepted answer 的建议时,我得到以下结果:

stachyra> docker run -i -t --privileged -v /dev/disk2s2:/dev/foo ubuntu bash
root@8da7b492a707:/# uname -a
Linux 8da7b492a707 4.1.18-boot2docker #1 SMP Sat Feb 20 08:24:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@8da7b492a707:/# ls -l /dev/foo
total 0
root@8da7b492a707:/#

根据响应,可以看到 docker 确实正确地启动了一个 linux 容器,并且它还按要求在容器内创建了一个卷/dev/foo,但是 U 盘的实际内容无法通过该位置——ls -l 命令声称那里没有文件或目录。

我还尝试了 alternate response 中描述的第二种方法同一个问题,但失败得更糟:

stachyra> docker run -i -t --device=/dev/disk2s2 ubuntu bash
docker: Error response from daemon: error gathering device information while adding custom device "/dev/disk2s2": not a device node.
stachyra>

我找到了另一个 discussion thread在 stackoverflow 上,这表明原始 USB 访问在 OSX 中的处理方式与在 Linux 中完全不同,我怀疑这可能是上述两种 USB 访问尝试都失败的原因。

但是,我应该怎么做呢?也就是说,允许 docker 访问安装在 OSX 主机而不是 linux 上的 USB 设备的正确操作或命令顺序是什么?

最佳答案

我终于能够通过使用 machine-diskutil.sh 从容器内的/var/media 访问我的 USB 驱动器warmoverflow 的评论中提到的脚本是这样的

machine-diskutil.sh mount my-machine-name /Volumes/my-usb-drive

然后像这样启动容器

docker run -v /Volumes/my-usb-drive:/var/media -it my/image:latest bash

因为我曾尝试在 VirtualBox 中手动将/Volumes/my-usb-drive 添加为共享文件夹,所以我首先遇到了这个错误。

Error: The shared folder /Volumes/Seagate already exists on the docker machine, please unmount it first.

所以我手动删除它并重新运行 machine-diskutil.sh mount 命令没有任何问题。很棒的东西!

关于linux - 如何从 docker 容器内部访问 OSX 主机上的 USB 驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854886/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com