2017-08-13 63 views
0

當運行正在運行的節點容器時,「泊塢窗,撰寫了」,我得到以下錯誤:錯誤使用泊塢窗組成

npm info lifecycle [email protected]~dev: [email protected] 

> [email protected] dev /code/app 
> nodemon -L ./bin/www --exec babel-node 

sh: 0: getcwd() failed: No such file or directory 
path.js:1144 
     cwd = process.cwd(); 
        ^

Error: ENOENT: no such file or directory, uv_cwd at Error (native) 
at Object.resolve (path.js:1144:25) 
at Function.Module._resolveLookupPaths (module.js:361:17) 
at Function.Module._resolveFilename (module.js:431:31) 
at Function.Module._load (module.js:388:25) 
at Module.require (module.js:468:17) 
at require (internal/module.js:20:19) 
at Object.<anonymous> 
(/usr/local/lib/node_modules/nodemon/bin/nodemon.js:3:11) 
at Module._compile (module.js:541:32) 
at Object.Module._extensions..js (module.js:550:10) 

npm info lifecycle [email protected]~dev: Failed to exec dev script 
npm ERR! Linux 4.9.36-moby 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev" 
npm ERR! node v6.3.1 
npm ERR! npm v3.10.3 
npm ERR! code ELIFECYCLE 
npm ERR! [email protected] dev: `nodemon -L ./bin/www --exec babel-node` 
npm ERR! Exit status 1 
npm ERR! 
npm ERR! Failed at the [email protected] dev script 'nodemon -L ./bin/www -- 
exec babel-node'. 

我dockerfile看起來是這樣的:

FROM joakimbeng/node-zeromq 

RUN mkdir /code/ 
RUN mkdir /code/app/ 
COPY package.json /code/ 

WORKDIR /code 
RUN npm install -g nodemon babel-cli 
RUN npm install 

WORKDIR /code/app 

CMD ["npm", "run", "dev"] 

而且我的服務一樣這樣的:

node: 
    build: ./node/ 
    ports: 
     - "3000:3000" 
    volumes: 
     - ../code:/code/app 
    links: 
     - mongodb 
     - python 
    environment: 
     - NODE_ENV=dev 
     - NODE_PATH=/code/node_modules 
     - MONGODB_ADDRESS=mongodb 
     - PYTHON_ADDRESS=python 

我試圖刪除所有容器和圖像,並再次運行整個事情,但仍然出現同樣的錯誤。運行「docker-compose build」時似乎很好。

我想在這裏做到的是:1。 讓容器處理所有的依賴關係(節點模塊) 2.安裝我的代碼基礎,容器 3.使用nodemon熱重載

+0

我認爲解決這個問題的另一個可能的解決方案是[這裏](https://stackoverflow.com/questions/30043872/docker-compose-node-modules-not-present-in-a-volume-after-npm -install-succeeds/32785014#32785014) –

回答

1

我結束了一些類似於我最初做的事情。不知道是什麼導致了我的OP中的錯誤,但差異似乎是我將我的依賴關係安裝在不同的目錄中。

Dockerfile:

FROM joakimbeng/node-zeromq 

RUN mkdir /code/ 
RUN mkdir /dependencies/ 
COPY package.json /dependencies/ 

WORKDIR /dependencies/ 
RUN npm install -g nodemon babel-cli 
npm install 

WORKDIR /code/ 
CMD bash -c "npm run dev" 

服務的搬運工,撰寫:

node: 
build: ./node/ 
ports: 
    - "3000:3000" 
volumes: 
    - ../code/:/code 
links: 
    - mongodb 
    - python 
environment: 
    - NODE_ENV=dev 
    - NODE_PATH=/dependencies/node_modules 
    - MONGODB_ADDRESS=mongodb 
    - PYTHON_ADDRESS=python 

這樣,我的依賴性只在構建安裝。

0

您的問題是分享量。當您從主機共享容器到容器時。如果該文件夾已經存在於容器中,則主容器將遮蓋容器文件夾。

如果你的容器裏有10個文件,你的主機上有0個文件,那麼容量映射你的容器後會看到0個文件。由於主機文件夾已安裝,並且沒有任何內容。所以你Dockerfile聲明

RUN npm install 

如果主機卷沒有完成npm安裝,實際上已經消失了。幸運的是,解決方案很簡單。你可以改變你的CMD以下

CMD bash -c "npm install && npm run dev" 

如果你不想改變Dockerfile您可以在docker-compose.yml文件中添加下面的node服務

command: bash -c "npm install && npm run dev" 

編輯(14- 8月):

如果你想要你的依賴在圖像中,那麼你需要在你的docker-compose.yml做一些改變,你需要的是內部代碼是l孤獨,只是鏈接從該目錄中node_modules到你的應用程序目錄

node: 
    build: ./node/ 
    ports: 
     - "3000:3000" 
    volumes: 
     - ../code:/code/app 
    command: bash -c "ln -fs /code/node_modules /code/app/node_modules && exec npm run dev" 
    links: 
     - mongodb 
     - python 
    environment: 
     - NODE_ENV=dev 
     - NODE_PATH=/code/node_modules 
     - MONGODB_ADDRESS=mongodb 
     - PYTHON_ADDRESS=python 

還有一點我注意到EFT是跑步package.json/code安裝,並把你的代碼/code/app當你運行像這可能是錯誤的。但與上面建議的新編輯,這應該工作

+0

此解決方案可以正常工作,但會導致在每個「docker-compose up」上運行npm install,這是不可取的。我在構建圖像時應該安裝依賴項。 – mrlarssen

+0

@mrlarssen,閱讀我編輯的答案 –

+0

謝謝。從來沒有想過創建一個符號鏈接。 在調查時,我發現了另一種似乎也適用的方法。看到我的答案。 – mrlarssen