Docker中的共享文件夹.用Windows.不仅是"C/user /"路径

8 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'
Run Code Online (Sandbox Code Playgroud)

现在使用此命令,我想在我的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中重新启动服务器,或者像在Vagrant中那样重启服务器?

Wil*_*ell 6

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

来自Docker Docs:

所有其他路径都来自虚拟机的文件系统.[...]对于VirtualBox,您需要将主机文件夹作为VirtualBox中的共享文件夹.然后,您可以使用Docker -v标志安装它 .

要将文件夹安装在容器中:

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

与VBox共享目录:

这只需要做一次.

在Windows CMD中:

VBoxManage sharedfolder add "boot2docker-vm" --name "d-share" --hostpath "D:\"
Run Code Online (Sandbox Code Playgroud)

在VM中挂载共享目录:

每次重新启动VM时都需要执行此操作.

在Boot2Docker VM终端中:

mount -t vboxsf -o uid=1000,gid=50 d-share /d
Run Code Online (Sandbox Code Playgroud)

要查看其工作原理的来源和解释,请查看我对其他类似问题的完整答案

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

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

也来自Docker Docs:

挂载主机目录对于测试非常有用.例如,您可以在容器中安装源代码.然后,更改源代码并实时查看其对应用程序的影响.

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

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

注意:

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


Von*_*onC 2

\n

我知道 Docker 只共享 /c/User/folder,对吗?

\n
\n\n

确实如此,而且它能够这样做是因为用于为 docker 提供 Linux 主机的 VirtualBox VM 正在共享 C:\\Users。

\n\n

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

\n\n\n\n
\n\n

最后一个替代方案的问题在“ \nboot2docker 简介”中进行了描述(向下滚动到“共享文件夹”部分)

\n\n
\n

主要问题vboxsf是它不执行任何类型的缓存,因此当您尝试共享大量小文件(大 git repo\xe2\x80\x99s)或任何文件系统读取繁重的文件(grunt )性能成为一个因素。

\n\n

到目前为止,我想出的最好的解决方案是使用 vagrant 和 boot2docker 的自定义版本,并启用 NFS 支持,它只有很少的 \xe2\x80\x9chacking\xe2\x80\x9d 才能工作,这很好。
\n 对我来说一个足够好的卖点是使用 NFS 而不是 vboxsf 来提高速度,它\xe2\x80\x99 实际上相当惊人。

\n\n

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

\n\n

卷分享中的神奇酱料就在这一行。

\n
\n\n
config.vm.synced_folder ".", "/vagrant", type: "nfs"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

它告诉 Vagrant 使用 NFS 将当前目录共享到 /vagrant 目录中的 boot2docker 虚拟机。

\n
\n\n

然而,该项目似乎很旧,需要进行调整才能包含最新版本boot2docker.iso(docker 1.9.1)。

\n