当卷端点不在驱动器上时,Docker容器不会在Windows卷上看到文件C:

我想在我的工作过程中使用泊坞窗图像。 例如,我想使用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或完整的path在MINGW风格/ D /项目/美孚/酒吧/ Web /萨斯)例如

 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添加引导斜杠到path也不能正常工作:

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

好的。 最后,我为自己的问题find了一个解释和解决办法。 这个解决scheme将适用于Windows和MacOS X(因为它们都使用VirtualBox来使Docker做到这一点)。

问题的根源在于两点:

  1. 默认情况下,VirtualBox虚拟机对主机文件系统( certificate )的访问权限有限。 在我的情况下,它有权访问驱动器C上的用户文件夹:通过VBox共享文件夹( 屏幕 )。 谢谢,我可以使用这样的卷映射:〜/ sass:/ src(或完整path:/ c / users / dbykadorov / sass)。 不幸的是,这个configuration不允许我使用/ c / users /以外的任何path。

这个解决scheme :添加另一个共享文件夹到虚拟机,指向我需要的目录。 我创build了新的共享d:/项目( 屏幕 )。 重新启动您的虚拟机。

我希望你能在这里完成你的案子。 但在我的情况下,VirtualBox不会在系统启动时安装新的共享文件夹。 所以,我得到了第二个问题:

  1. VirualBox不会安装额外的共享文件夹,我刚刚添加。

附加解决scheme

让我们尝试手动挂载共享文件夹。 以任何可用的方式login到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 

重要说明 :为了使卷创build更清晰,将共享文件夹挂载到与主机上相同的path将是个好主意。 例如,如果我们需要从E:\ Foo \ Bar \ Baz创build卷(MINGW风格的/ e / Foo / Bar / Baz),那么我们需要为E:\ Foo \ Bar \ Baz添加新的共享文件夹,到你的Docker虚拟机中的/ e / Foo / Bar / Baz。

就这些。