![](/img/trans.png)
[英]Docker toolbox volumes on windows doesn't refresh changes on container
[英]Docker container doesn't see files on windows volumes when the volume endpoint isn't on the drive C:
我想在工作過程中使用docker映像。 例如,我想使用larryprice / sass將我的SASS文件編譯為CSS。 該圖像非常簡單:
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:\\ Projects \\ Foo \\ Bar \\ web \\ sass
因此,我的問題如下:當我從驅動器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
root@541aabac9ceb:/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中需要的任何位置掛載卷? 還是我做錯了什么?
ps在路徑中添加前導斜杠也不起作用:
docker run --name sass -v //d/Projects/Foo/Bar/web/sass:/src --rm larryprice/sass
好的。 最后,我為自己的問題找到了解釋和解決方案。 該解決方案適用於Windows和MacOS X(因為它們都使用VirtualBox來使Docker做事)。
問題的根源包括兩點:
這時的解決方案 :將另一個共享文件夾添加到VM,指向我需要的目錄。 我創建了新的共享d:/ Projects( 屏幕 )。 重新啟動您的VM。
希望您能結案。 但就我而言,VirtualBox不會在系統啟動時掛載新的共享文件夾。 因此,我遇到了第二個問題:
附加解決方案 :
讓我們嘗試手動安裝共享文件夾。 通過任何可用的方式登錄到VM。 在控制台中:
# Create mount point directory
$ mkdir -p /d/Projects
# Mount shared folder
$ mount -t vboxsf d/Projects /d/Projects
好的,這可以解決問題! 現在,我可以掛載任何項目的目錄(在D:\\ Projects中)!
但是...當我重新啟動我的虛擬機掛載點會消失=(現在,我們需要使我們的掛載點更持久如上所述, 在這里 :
# 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(MINGW風格的/ e / Foo / Bar / Baz)創建卷,那么我們需要為E:\\ Foo \\ Bar \\ Baz添加新的共享文件夾並將其完全安裝到Docker VM中的/ e / Foo / Bar / Baz。
就這些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.