无法在Windows 10上与Docker Toolbox共享Volume

时间:2018-02-16 13:59:03

标签: docker dockerfile

我正在尝试使用docker设置我的项目。我在Windows 10 Home上使用Docker Toolbox。我是码头工人的新手。根据我的理解,我必须将我的文件复制到新容器并添加一个卷,以便我可以保持gulp所做的更改。

这是我的文件夹结构

-- src
|- dist
|- node-modules
|- gulpfile.js
|- package.json
|- Dockerfile

Dockerfile代码

FROM node:8.9.4-alpine
RUN npm install -g gulp
CMD [ "ls", 'source' ]

我为 * docker run -v *

尝试了很多解决方案

e.g

docker run -v /$(pwd):/source <container image>
docker run -v //c/Users/PcUser/Desktop/proj:/source <container image>
docker run -v //c/Users/PcUser/Desktop/proj:/source <container image>
docker run -v //d/proj:/source <container image>
docker run -v /d/proj:/source <container image>

*但没有运气*

任何人都可以描述如何使用相同的结构为自己设置它。为什么我无法安装我的主机文件夹。

P.S:如果我使用两个容器,一个用gulp编译我的代码,一个用nginx编译,用于提供 dist 文件夹的内容。我该怎么做。

3 个答案:

答案 0 :(得分:2)

@ sxm1972感谢您的努力和帮助。

您可能正在使用Windows Pro或服务器版。我正在使用 Windows 10家庭版

以下是我如何解决它,因此使用相同设置的其他人可以解决他们的问题。

  

可能有更好的方法来解决这个问题,如果有效的方法,请发表评论。

因此...

首先,问题是......为什么我在容器中没有看到PC上的共享卷。

Ans:如果我们使用Docker的Boot2Docker和VirtualBox(我是),那么无论何时安装卷,它都会引用Boot2Docker VM中的文件夹

Image: Result of -v with docker in VirtualBox Boot2Docker

因此,如果我们尝试使用$ ls,它会显示一个空文件夹,在我的情况下它会显示。

因此,如果我们要将文件从Windows环境共享到Container,我们必须将文件夹实际挂载到 Boot2Docker VM

Image: Resulting Mounts Window <-> Boot2Docker <-> Container

要实现此目的,我们必须使用以下command

手动将文件夹挂载到VM
vboxmanage sharedfolder add default --name "<folder_name_on_vm>" --hostpath "<path_to_folder_on_windows>" --automount

如果您遇到错误运行命令,请说vboxmanager没有找到添加虚拟框文件路径到您的系统路径。对我而言,C:\Program Files\Oracle\VirtualBox

运行该命令后,您会在<folder_name_on_vm>上看到root。您可以docker-machine ssh default然后ls /进行检查。确认文件夹<folder_name_on_vm>存在后,您可以将其用作容器的卷。

docker run -it -v /<folder_name_on_vm>:/source <container> sh

希望这有助于......!

PS如果您感觉懒惰并且不想安装文件夹,您可以将项目放在C:/Users文件夹中,因为它默认安装在VM上,如{{3 }}。

答案 1 :(得分:0)

问题是因为您使用的基本映像将docker run -it node:8.9.4-alpine REPL作为其ENTRYPOINT运行。如果您将图像作为FROM node:8.9.4-alpine CMD ["sh"] 运行,您将看到一个节点提示,它将不会像您想要的那样运行npm命令。

我解决这个问题的方法是使用以下Dockerfile创建自己的基本映像:

docker built -t mynodealpine .

按如下方式构建: FROM mynodealpine RUN npm install -g gulp CMD [ "/bin/sh", "-c", "ls source" ]

然后使用此修改后的Dockerfile构建您的图像:

Settings

对于有关安装卷的问题,由于您使用的是Docker for Windows,因此需要进入Shared Drives(单击系统托盘中的图标),然后启用PS C:\users\smallya\testnode> dir Directory: C:\users\smallya\testnode Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2018 11:11 AM dist d----- 2/18/2018 11:11 AM node_modules -a---- 2/18/2018 11:13 AM 77 Dockerfile -a---- 2/18/2018 11:12 AM 26 gulpfile.js -a---- 2/18/2018 11:12 AM 50 package.json PS C:\users\smallya\testnode> docker run -it -v c:/users/smallya/testnode:/source mynodealpinenew Dockerfile dist gulpfile.js node_modules package.json PS C:\users\smallya\testnode>

以下是我能得到的输出:

{{1}}

答案 2 :(得分:0)

感谢这个问题,可以通过VirtualBox图形对话框进行更简单的配置对我有用,无需使用命令行,尽管不一定更通用:

enter image description here

在VirtualBox共享文件夹配置对话框中配置共享文件夹, 然后像这样调用mount

docker run --volume //d/docker/nginx:/etc/nginx
  

我将容器中的/ etc / nginx目录绑定到   D:\ Program Files \ Docker工具箱\ nginx

来源: https://medium.com/@Charles_Stover/fixing-volumes-in-docker-toolbox-4ad5ace0e572#fromHistory#fromHistory