Docker中的共享文件夹。 用Windows。 不仅是“C / user /”path
我是Docker的新手,我来自stream浪汉。
我在我的“D:/ Works / something / DockerFirstTime”文件夹中使用Docker(1.9.1)。
现在我创build机器
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 / User /文件夹 ,对吗?
我怎样才能使用该文件夹的文件,并修改我的文件在Windows中的编辑器,然后重新启动服务器,如在一台PC上的普通shell或像stream浪汉?
这个问题和这个问题有一个类似的根本问题,在boot2docker中挂载一个非C:/ drive文件夹。 我写了一个深入的答案,提供了与VonC答案上半部分相同的信息。
从Docker文档 :
所有其他path来自您的虚拟机的文件系统。 […]在VirtualBox的情况下,您需要将主机文件夹作为VirtualBox中的共享文件夹。 然后,您可以使用Docker
-v
标志挂载它。
要让您的文件夹安装在容器中:
这将挂载整个D:\驱动器,您可以简单地将文件path更改为更精细和更具体。
与VBox共享目录:
这只需要做一次。
在Windows CMD中:
VBoxManage sharedfolder add "boot2docker-vm" --name "d-share" --hostpath "D:\"
将共享目录挂载到虚拟机中:
这将需要在每次重新启动虚拟机时完成。
在Boot2Docker VMterminal中:
mount -t vboxsf -o uid=1000,gid=50 d-share /d
要查看如何工作的来源和解释,请查看我对其他类似问题的完整答案
之后,您可以使用Docker中的-v
/ --volume
标志将此文件夹或任何子文件夹或文件装载到容器中。 如果你挂载你的整个D:\驱动器,你可以使用你的问题,确切的docker运行命令,现在应该工作。 如果您安装了特定的驱动器部分,则必须更改匹配的path。
要在Windows中编辑,请在docker中运行:
另外从Docker Docs :
挂载主机目录对于testing是有用的。 例如,您可以在容器中安装源代码。 然后,更改源代码并实时查看其对应用程序的影响。
作为一个VBox共享目录,你应该能够看到Boot2docker虚拟机中反映的Windows端的变化。
您可能需要重新启动容器才能看到实际显示的更改,这取决于容器内运行的程序(在您的情况下为ruby)如何使用这些文件。 例如,如果在容器启动时将文件编译到应用程序中,您肯定需要重新启动容器以查看更改。
注意:
当在Windows中编写文件并在Linux中读取它们时,请注意CR LF与LF行的结尾差异。 确保你的文本编辑器是用Unix行结束符保存文件,否则你可能会看到在所有行尾加上'^ M'引起的错误。
我知道Docker只共享/ c / User /文件夹,对吗?
它可以,因为用于为docker提供Linux主机的VirtualBox VM共享C:\ Users。
docker工看到另一个文件夹,你需要:
- 使用
VBoxmanage sharedfolder add "VM name" --name "sharename" --hostpath "D:\Works"
-
然后挂载
/D/Works
在VM会话中工作,正如在“ 使用 docker 容器(使用 docker windows client)的共享窗口文件夹(c / Users /除外) ”中提到的 ,并在boot2docker中提到 :mount -t vboxsf -o uid=1000,gid=50 sharename /some/mount/location
最后一个备选scheme的问题在“ boot2docker简介 ”(向下滚动到“共享文件夹”部分)
vboxsf
的主要问题是,它不会做任何cachingtypes的caching,所以当你试图共享大量的小文件(大的git回购)或任何文件系统读取重(grunt)的性能成为一个因素。到目前为止我所提出的最好的解决scheme是使用vagrant与定制版本的boot2docker启用NFS支持,这是非常less的“黑客”得到工作,这是很好的。
对我来说,一个足够好的卖点是通过使用NFS而不是vboxsf来提高速度,实际上这是相当惊人的。这是我一直在使用https://vagrantcloud.com/yungsang/boxes/boot2docker的项目。
分享中的魔力就在这一行。
config.vm.synced_folder ".", "/vagrant", type: "nfs"
它告诉Vagrant使用NFS将你当前的目录分享到/ vagrant目录下的boot2docker虚拟机。
但是,这个项目看起来很老,需要进行修改才能包含最新的boot2docker.iso
( boot2docker.iso
1.9.1)。