如何将 C:\Users 之外的卷映射到 Windows 上的容器?

Posted

技术标签:

【中文标题】如何将 C:\\Users 之外的卷映射到 Windows 上的容器?【英文标题】:How do I map volume outside C:\Users to container on Windows?如何将 C:\Users 之外的卷映射到 Windows 上的容器? 【发布时间】:2015-08-15 16:57:28 【问题描述】:

我正在做服务器端开发,我的工作区位于 D: 因为我不喜欢在 C: 上存储数据,但只是找不到将 d:\Workspace 映射到 /home/workspace 的方法

我尝试通过以下方式创建从 C:\Users\username 到 D:\Workspace 的符号链接:

    将 C:\Users\username\Workspace 映射到 /home/workspace 停止容器 重命名 C:\Users\username\Workspace 创建名为 Workspace 的符号链接到 D:\Workspace 启动容器

起初 Docker 在该会话期间运行良好,直到我重新启动 Boot2Docker,然后启动容器我会得到“C:\Users\username\Workspace 文件存在”。

我认为这是 Docker 的一个问题,但无论如何我想映射到 C:\Users 之外。

【问题讨论】:

【参考方案1】:

在主机和 Boot2Docker 虚拟机之间共享工作空间 $ boot2docker down $ cd "C:\Program Files\Oracle\VirtualBox" $ VBoxManage sharedfolder add boot2docker-vm --name mydata --hostpath "D:\Workspace" $ boot2docker up

装载共享文件夹 $ boot2docker ssh 'sudo mkdir -p /data' $ boot2docker ssh 'sudo mount -t vboxsf -o "defaults,uid=33,gid=33,rw" mydata /data'

创建纯数据容器。 Docker 最佳实践 always recommends 您使用纯数据容器。您可以重用已经可用的纯数据容器: $ docker run --volume /data:/data --name mydata dylanlindgren/docker-laravel-data

如果您希望此更改永久生效,您需要在启动配置文件 /var/lib/boot2docker/bootlocal.sh 中添加最后一条命令 sleep 10 && sudo mount -t vboxsf -o "defaults,uid=33,gid=33,rw" mydata /data docker start mydata

然后,您的工作区将安装在 /data

您可以在 Boot2Docker here 中找到有关 VirtualBox Guest Additions 的更多文档。

【讨论】:

我收到了这个错误:mount.vboxsf: mount failed with the error: Protocol error mount: mount mydata on /data failed: Protocol error 我添加了关于创建纯数据容器的第一步。我在上一个答案中省略了该步骤。 避免“协议错误”,重试 VBoxManage 命令。确保此命令运行没有错误。 @dmoreno:请您更新一下,因为boot2docker 已被弃用?【参考方案2】:

现在更新了答案,因为 boot2docker 已被弃用。 现在使用 docker-machine 实现了同样的效果。

这里描述了答案:https://github.com/docker/machine/issues/1814

基本上,在 Virtual Box UI 中挂载共享文件夹后,您需要在命令提示符下运行以下命令:

# Note the extra / at the beginning of the path because of msys/MinGW.
docker-machine.exe ssh default 'sudo mkdir --parents //e/Documents/workspace'
docker-machine.exe ssh default 'sudo mount -t vboxsf e/Documents/workspace //e/Documents/workspace'

【讨论】:

在 *** 规则下,您不仅应该提供完成手头任务的步骤,还应该解释每一行以及为什么要告诉他们这样做。糟糕的答案,5/10

以上是关于如何将 C:\Users 之外的卷映射到 Windows 上的容器?的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX,NASA World Wind:如何将 JavaFX 组添加到 NASA World Wind Model

Java Servlet - 将 servlet 映射到除字符串之外的每个 URL

如何在捆绑包之外配置多个 orm 映射原则

如何将挂载点的卷 GUID 转换为实际路径?

如何将 int 映射到 C/C++ 中的相应字符串

c ++:如何将整数添加到字符串