sta*_*yra 5 linux macos usb mount docker
我有一个最终要在打包在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
Run Code Online (Sandbox Code Playgroud)
OSX已将我的外部USB驱动器device挂载/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
Run Code Online (Sandbox Code Playgroud)
并且还应该注意,驱动器具有多个目录和数据,至少在通过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
Run Code Online (Sandbox Code Playgroud)
我尝试遵循此问题的建议,该问题描述了当docker在linux主机中运行时如何在docker中安装USB驱动器。但是我的本地笔记本电脑是OSX,而不是linux,因此它似乎不起作用。
明确地,当尝试遵循已接受答案的建议时,我得到以下结果:
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:/#
Run Code Online (Sandbox Code Playgroud)
根据响应,您可以看到docker确实确实正确启动了linux容器,并且还根据请求在容器内部创建了一个卷/ dev / foo,但是无法通过该位置访问USB驱动器的实际内容- -该ls -l命令声称那里没有文件或目录。
我还尝试了对相同问题的替代回答中所述的第二种方法,但失败的甚至更糟:
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>
Run Code Online (Sandbox Code Playgroud)
我在stackoverflow上发现了另一个讨论线程,该线程表明原始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
Run Code Online (Sandbox Code Playgroud)
然后像这样启动容器
docker run -v /Volumes/my-usb-drive:/var/media -it my/image:latest bash
Run Code Online (Sandbox Code Playgroud)
因为我尝试在 VirtualBox 中手动添加 /Volumes/my-usb-drive 作为共享文件夹,所以我首先收到此错误。
错误:docker机器上已经存在共享文件夹
/Volumes/Seagate,请先卸载它。
所以我手动删除它并重新运行machine-diskutil.sh mount命令,没有任何问题。好东西!
| 归档时间: |
|
| 查看次数: |
4390 次 |
| 最近记录: |