2016-03-07 362 views
2

我有一個應用程序,我最終想要在一個docker圖像中打包的雲計算服務上運行(例如,AWSGoogle 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?

+0

試試這個http://stackoverflow.com/questions/30040708/how-to-mount-local-volumes-in-docker-machine/32030385#32030385 –

+0

@warmoverflow:謝謝,這有些幫助,但不幸的是它並不完全讓我一直在那裏。我確實能夠按照其他答案中概述的步驟在Oracle VM Virtualbox * virtual * *機器*內部安裝USB驅動器(具體來說,在docker似乎用於運行docker引擎的「默認」機器中) ,但是,它似乎並沒有在docker * container *裏面工作 - mount命令給我一個權限被拒絕的錯誤。如何在碼頭集裝箱內安裝USB驅動器,具體如何? – stachyra

+0

你是否按照'boot2docker'部分使用'uid'完全如答案?這可能是許可問題的關鍵。 –

回答

2

我終於能夠通過使用warmoverflow的評論,像這樣

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

提到machine-diskutil.sh腳本,然後啓動容器,像這樣

docker run -v /Volumes/my-usb-drive:/var/media -it my/image:latest bash 
在/ var /媒體訪問我的容器內我的USB驅動器

因爲我曾嘗試在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沒有任何問題。好東西!

相關問題