我有一個應用程序,我最終想要在一個docker圖像中打包的雲計算服務上運行(例如,AWS或Google Cloud)。應用程序需要在雲中運行的原因是因爲它旨在處理大型數據文件,但在實際部署之前,我想首先在本地筆記本電腦上測試它,並使用我已有的一個大型數據文件存儲(用於測試和開發目的)在外部USB驅動器上。如何從Docker容器內訪問OSX主機上的USB驅動器?
我的機器是OSX的筆記本電腦,而我使用的是最近的碼頭工人的版本:
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
[email protected]:/# 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
[email protected]:/# ls -l /dev/foo
total 0
[email protected]:/#
基於響應,人們可以看到,搬運工人確實正確地啓動Linux容器,它也根據請求在容器內部創建卷/ dev/foo,但無法通過該位置訪問USB驅動器的實際內容 - 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上計算器這表明原始USB的訪問完全不同的處理OSX比Linux,我懷疑這可能是上述兩個USB訪問嘗試失敗的原因。
但是,我應該怎麼做呢?也就是說,什麼是正確的操作或命令序列,以便docker訪問安裝在OSX主機上的USB設備,而不是Linux?
試試這個http://stackoverflow.com/questions/30040708/how-to-mount-local-volumes-in-docker-machine/32030385#32030385 –
@warmoverflow:謝謝,這有些幫助,但不幸的是它並不完全讓我一直在那裏。我確實能夠按照其他答案中概述的步驟在Oracle VM Virtualbox * virtual * *機器*內部安裝USB驅動器(具體來說,在docker似乎用於運行docker引擎的「默認」機器中) ,但是,它似乎並沒有在docker * container *裏面工作 - mount命令給我一個權限被拒絕的錯誤。如何在碼頭集裝箱內安裝USB驅動器,具體如何? – stachyra
你是否按照'boot2docker'部分使用'uid'完全如答案?這可能是許可問題的關鍵。 –