2016-08-18 88 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