我正在尝试使用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 文件夹的内容。我该怎么做。
答案 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
手动将文件夹挂载到VMvboxmanage 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图形对话框进行更简单的配置对我有用,无需使用命令行,尽管不一定更通用:
在VirtualBox共享文件夹配置对话框中配置共享文件夹, 然后像这样调用mount
docker run --volume //d/docker/nginx:/etc/nginx
我将容器中的/ etc / nginx目录绑定到 D:\ Program Files \ Docker工具箱\ nginx