linux – 如何从docker容器内访问OSX主机上的USB驱动器?
我有一个应用程序,我最终想要在
docker图像内打包的云计算服务(例如,如
AWS或
Google Cloud)上运行.应用程序需要在云中运行的原因是它设计用于处理大型数据文件,但在实际部署之前,我想首先在本地笔记本电脑上测试它,使用我所拥有的单个大型数据文件存储(用于测试和开发目的)在外部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,但是无法通过该位置访问USB驱动器的实际内容 – -s 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> 我在stackoverflow上发现了另一个discussion thread,这表明原始USB访问在OSX中的处理方式与在Linux中完全不同,我怀疑这可能是上述两种USB访问尝试失败的原因. 但是,我应该怎么做呢?也就是说,允许docker访问安装在OSX主机而不是linux上的USB设备的正确动作或命令序列是什么? 解决方法
我终于能够通过使用warmoverflow评论中提到的
machine-diskutil.sh脚本从容器内的/ var / media访问我的USB驱动器
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作为共享文件夹,所以我首先遇到此错误.
所以我手动删除它并重新运行machine-diskutil.sh mount命令没有任何问题.好东西! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |