2016-08-18 71 views
3

我在学习docker,并且遇到了一些处理nodejs应用程序上的音量的麻烦。未找到Docker卷和package.json

其实,我有一个简单的应用程序,我想测试每次我重新启动我的容器。

这样一来,我有以下dockerfile:

FROM node:4-onbuild 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

CMD [ "npm", "test" ] 

现在,我已经建立了使用图像:

docker build -t myapp . 

我试着用以下的脚本来运行它:

docker run -v //c/Project/nodejs/my-app:/usr/src/app my-app 

docker run -v /c/Project/nodejs/my-app:/usr/src/app my-app 

甚至

docker run -v c:/Project/nodejs/my-app:/usr/src/app my-app 

我有以下的错误,告诉我,我没有/ usr/src目录/应用程序内的package.json文件(但它就是我的卷所在,它应该是正确的没有)

npm info it worked if it ends with ok 
npm info using [email protected] 
npm info using [email protected] 
npm ERR! Linux 4.4.15-moby 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "test" 
npm ERR! node v4.5.0 
npm ERR! npm v2.15.9 
npm ERR! path /usr/src/app/package.json 
npm ERR! code ENOENT 
npm ERR! errno -2 
npm ERR! syscall open 

npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json' 
npm ERR! enoent This is most likely not a problem with npm itself 
npm ERR! enoent and is related to npm not being able to find a file. 
npm ERR! enoent 

npm ERR! Please include the following file with any support request: 
npm ERR!  /usr/src/app/npm-debug.log 

注意:?如果我用COPY命令,而不是体积,它的伟大工程,我能看到泊坞窗容器内

NB2我的NodeJS测试:我为上窗户10,码头v1.12.0

回答

4

Docker for Windows运行在一个运行你的容器的虚拟机里面(它仍然需要一个Linux主机)。挂载主机卷时,该卷将挂载在Linux主机上。从Linux VM挂载到父Windows操作系统的唯一目录是c:/ Users,在VM中可见为/ c/Users(请参阅docker's volume tutorial)。将您的项目移动到Users下的一个目录并加载它。

空文件夹/丢失文件的原因在于,当您将不存在的主机文件夹/文件装入容器时,这是默认设置。在你的情况下,VM中不存在/ c/Project。 COPY的工作原理是在构建开始之前,构建将当前文件夹(除.dockerignore条目)发送到Docker引擎(在VM中运行)。这是通过API传输的,而不是进行卷装。

+0

有很多方法可以解决这个问题,比如在引导时通过向VM的启动bash脚本添加行来将卷挂载到VM上https://stackoverflow.com/a/32030385/404699 – steampowered