Docker中的共享文件夹。用Windows。不仅是“C / user /”路径

时间:2015-11-28 00:01:07

标签: docker boot2docker dockerfile docker-compose docker-machine

我是Docker的新手,我来自Vagrant。

我在“D:/ Works / something / DockerFirstTime”文件夹中使用Docker(1.9.1)。

现在我用

创建机器

docker-machine create first

和简单的 Dockerfile

FROM ruby:2.2-onbuild

和简单的 Gemfile

source 'https://rubygems.org'
gem 'rails'

现在使用此命令我想在我的Dockerfile的同一个硬盘中使用像Vagrant中的共享文件夹:

docker run -it -v //d/Works/something/DockerFirstTime:/usr/src/app -w /usr/src/app ruby:2.2 bundle install

但它不起作用。

怎么做?

我知道Docker只共享 / c /用户/文件夹,是吗?

如何在Windows中使用带有文件的文件夹并使用编辑器修改我的文件,然后在单个PC上的普通shell中重新启动服务器,或者像在Vagrant中一样重新启动服务器?

2 个答案:

答案 0 :(得分:6)

这个问题和this question有一个类似的根问题,在boot2docker中安装了一个非C:/ drive文件夹。我在另一个问题上写了一个深入的答案,提供了与@ VonC答案上半年相同的信息。

来自Docker Docs

  

所有其他路径都来自虚拟机的文件系统。 [...]在...   在VirtualBox的情况下,您需要将主机文件夹作为一个可用的   VirtualBox中的共享文件夹。然后,您可以使用Docker安装它   -v旗帜。

要将文件夹装入容器中:

这将安装整个D:\驱动器,您只需将文件路径更改为更精细和更具体。

与VBox共享目录:

这只需要做一次。

在Windows CMD中:

VBoxManage sharedfolder add "boot2docker-vm" --name "d-share" --hostpath "D:\"

在VM中挂载共享目录:

每次重新启动VM时都需要这样做。

在Boot2Docker VM终端中:

mount -t vboxsf -o uid=1000,gid=50 d-share /d

要了解其工作原理和说明,请参阅my full answer to the other similar question

在此之后,您可以使用Docker中的-v / --volume标志将此文件夹或任何子文件夹或文件装入容器中。如果您安装了整个D:\驱动器,则可以使用您问题中的确切docker run命令,它现在可以正常工作。如果您安装了驱动器的特定部分,则必须更改匹配的路径。

要在Windows中编辑,请在docker中运行:

同样来自Docker Docs

  

挂载主机目录对测试很有用。例如,你   可以在容器中安装源代码。然后,更改源代码   并实时了解其对应用的影响。

作为VBox共享目录,您应该能够看到在boot2docker vm中反映的Windows端所做的更改。

您可能需要重新启动容器以查看实际显示的更改,这取决于在您的案例ruby中运行容器内的程序如何使用这些文件。例如,如果在容器启动时将文件编译到应用程序中,您肯定需要重新启动容器才能看到更改。

注意:

在Windows中编写文件并在Linux中读取文件时,请注意CR LF与LF行的结束差异。确保您的文本编辑器正在使用Unix行结尾保存文件,否则您可能会开始看到由所有行末尾附加的“^ M”引起的错误。

答案 1 :(得分:2)

  

我知道Docker只共享/ c / User /文件夹,是吗?

确实如此,因为用于为docker提供Linux主机的VirtualBox VM正在共享C:\ Users。

要让docker看到另一个文件夹,您需要:

最后一种替代方案的问题在" Introduction to boot2docker" (向下滚动到"共享文件夹"部分)

  

vboxsf的主要问题是它不会进行任何缓存类缓存,因此当您尝试共享大量小文件(大git repo)或文件系统读取的任何内容时(咕噜声)表现成为一个因素。

     

到目前为止,我提出的最佳解决方案是使用vagrant和自定义版本的boot2docker并启用了NFS支持,这很少“黑客”才能开始工作,这很好。
  对我而言,一个足够好的卖点是使用NFS而不是vboxsf来提高速度,实际上它非常惊人。

     

这是我一直使用的项目https://vagrantcloud.com/yungsang/boxes/boot2docker

     

分享卷中的魔力就在这一行。

config.vm.synced_folder ".", "/vagrant", type: "nfs"
  

告诉Vagrant使用NFS将您当前的目录共享到/ vagrant目录中的boot2docker VM。

但是,该项目看起来很旧,需要进行调整以包含最新的boot2docker.iso(docker 1.9.1)。