【问题标题】:Shared folder in Docker. With Windows. Not only "C/user/" pathDocker 中的共享文件夹。与 Windows。不仅是“C/user/”路径
【发布时间】:2015-11-28 00:01:06
【问题描述】:

我是 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/User/文件夹,对吗?

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

【问题讨论】:

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


    【解决方案1】:

    这个问题和this question有类似的root问题,在boot2docker中挂载了一个非C:/盘文件夹。我为另一个问题写了一个深入的答案,提供了与@VonC 答案的前半部分相同的信息。

    来自Docker Docs

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

    要将您的文件夹安装到容器中:

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

    与VBox共享目录:

    只需执行一次。

    在 windows CMD 中:

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

    在你的虚拟机中挂载共享目录:

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

    在 Boot2Docker 虚拟机终端中:

    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 共享目录,您应该能够看到从 Windows 端所做的更改反映在 boot2docker vm 中。

    您可能需要重新启动容器才能看到更改实际出现,这取决于容器内运行的程序(在您的情况下为 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 存储库)或任何文件系统读取繁重的文件时(咕哝) 性能成为一个因素。

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

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

    分卷中的法宝就在这一行。

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

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

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

    【讨论】:

    • 这个答案对我没有帮助。我听说了一些关于 RSync 的事情。你知道吗?我同时使用 OSX 和 Windows。
    猜你喜欢
    • 2019-02-24
    • 2019-01-02
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多