2016-05-03 74 views
0

我想在我的工作過程中使用泊塢窗鏡像。例如,我想用larryprice/sass將我的SASS文件編譯爲CSS。此圖像非常簡單:當卷端點不在驅動器上時,Docker容器不會在Windows捲上看到文件C:

FROM ruby:2.2 
RUN gem install sass 
WORKDIR /tmp 
ENTRYPOINT ["sass", "--watch", "/src"] 

我使用的是Windows 10,Docker 1.11和VirtualBox 5.0.16。放在工作SSD

我的項目文件,即映射到邏輯驅動器d - d:\項目\富\酒吧\網絡\青菜

所以,我的問題是以下幾點:當我附上一個捲到來自D驅動器的容器:(由$ PWD或通過MINGW風格的完整路徑/ D/Projects/Foo/Bar/web/sass)例如

cd /D/Projects/Foo/Bar/web 
docker run --name sass -v $PWD/sass:/src --rm larryprice/sass 

容器無法看到任何文件,SASS:

$ docker exec -i -t sass /bin/bash 
[email protected]:/tmp# ls -al /src/ 
total 4 
drwxr-xr-x 2 root root 40 May 3 13:05 . 
drwxr-xr-x 50 root root 4096 May 3 13:05 .. 

但是,當我從安裝系統盤(C :)卷一切工作正常:

$ docker run --name sass -v ~/sass:/src --rm larryprice/sass 
[Listen warning]: 
    Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback. 
>>> Sass is watching for changes. Press Ctrl-C to stop. 
>>> New template detected: ../src/test.sass 
     write /src/test.css 
     write /src/test.css.map 

我如何可以從Windows中需要的任何地方裝入卷?或者我在做什麼錯在我的情況?

p.s.向路徑中添加前導斜槓也不起作用:

docker run --name sass -v //d/Projects/Foo/Bar/web/sass:/src --rm larryprice/sass 
+0

Docker主機是在Virtualbox內部運行的VM,因此當您安裝卷時,它將在該VM內部安裝文件夾而不是Windows 10文件夾。你必須破解你從Windows安裝文件夾的方式:http://stackoverflow.com/a/30589373/5388620。 [Docker for Windows](https://blog.docker.com/2016/03/docker-for-mac-windows-beta/)旨在實現無縫卷裝入。 – Shanoor

+0

@ShanShan謝謝你的回答。看起來這是我剛發佈的同樣的解決方案。 –

回答

1

好的。最後,我爲自己的問題找到了一個解釋和解決方案。這個解決方案適用於Windows和MacOS X(因爲它們都使用VirtualBox來讓Docker做這件事)。

問題的來源包括來自兩點:

  1. 默認情況下,VirtualBox的VM具有有限的訪問主機的文件系統(proof)。在我的情況下,它有權訪問驅動器C上的用戶文件夾:通過VBox共享文件夾(screen)。感謝這個,我可以使用像這樣的卷映射:〜/ sass:/ src(或完整路徑:/ c/users/dbykadorov/sass)。不幸的是,這個配置不允許我使用/ c/users /以外的任何路徑。

解決方案對於這一點:添加另一個共享文件夾到虛擬機,指向我需要的目錄。我創建了新的分享d:/ Projects(screen)。重新啓動您的虛擬機。

我希望你能在這裏完成你的案例。但在我的情況下,VirtualBox在系統啓動時不會裝載新的共享文件夾。所以,我得到第二個問題:

  1. VirualBox不裝入額外的共享文件夾,我剛剛添加。

其他解決方案

讓我們嘗試手動安裝共享文件夾。以任何可用的方式登錄到VM。在控制檯中:

# Create mount point directory 
$ mkdir -p /d/Projects 
# Mount shared folder 
$ mount -t vboxsf d/Projects /d/Projects 

好的,這個竅門!現在我可以掛載任何項目的目錄(在D:\ Projects中)!

可是......當我重新啓動我的虛擬機掛載點會消失=(現在,我們需要使我們的掛載點更持久如上所述here

# Make a file bootlocal.sh 
$ touch /var/lib/boot2docker/bootlocal.sh 
# Edit it 
$ vi /var/lib/boot2docker/bootlocal.sh 
# Add follovin lines here: 
#!/bin/sh 
mkdir -p /d/Projects 
mount -t vboxsf d/Projects /d/Projects 
# Save the file and reboot VM 

重要提示:使如果我們需要從E:\ Foo \ Bar \ Baz(/ e/Foo/Bar/Baz)以MINGW風格創建卷,則創建更加清晰的卷將是個好主意。 ),那麼我們需要爲E:\ Foo \ Bar \ Baz添加新的共享文件夾,並將其準確安裝到Docker虛擬機中的/ e/Foo/Bar/Baz中。這就是全部。

相關問題