2016-08-23 83 views
0

我的web應用程序使用Node.js和MongoDB。我從拉蒙戈圖像。當我構建我的節點應用程序的圖像時,它可以單獨運行。但是,當我使用compose啓動容器時,會出現以下錯誤。從Dockerfile構建圖像時是不是應該安裝這些軟件包?無法使用Docker安裝軟件包撰寫

web_1 | module.js:457 web_1 | throw err;

web_1 | ^

web_1 |

web_1 | Error: Cannot find module 'mongoose'

web_1 | at Function.Module._resolveFilename (module.js:455:15)

web_1 | at Function.Module._load (module.js:403:25)

web_1 | at Module.require (module.js:483:17)

web_1 | at require (internal/module.js:20:19)

web_1 | at Object. (/worklog/worklog.js:7:14)

web_1 | at Module._compile (module.js:556:32)

web_1 | at Object.Module._extensions..js (module.js:565:10)

web_1 | at Module.load (module.js:473:32)

web_1 | at tryModuleLoad (module.js:432:12)

web_1 | at Function.Module._load (module.js:424:3)

Dockerfile

FROM node 

RUN mkdir -p /worklog 

WORKDIR /worklog 

RUN npm install mongoose \ 
    express \ 
    body-parser \ 
    express-session \ 
    method-override \ 
    connect-mongo \ 
    mongodb 

COPY login.html worklog.html workloglist.html worklog.js /worklog/ 

ENV NODE_VERSION 6.3.1 

EXPOSE 4000 

CMD npm, start 

泊塢窗,compose.yml

db: 
    image: mongo 
    ports: 
    - "27017:27017" 
    command: "--smallfiles --logpath=/dev/null" 
web: 
    build: . 
    command: node worklog.js 
    volumes: 
    - .:/worklog 
    ports: 
    - "4000:4000" 
    links: 
    - db 
    environment: 
    PORT: 4000 
+0

嘗試「docker-compose rm web && docker-compose rm db && docker-compose build && docker-compose up」以開始一個乾淨的環境。如果你「docker ps」你能看到db_1容器運行嗎? – TopperH

+0

我嘗試過,但同樣的結果。當我使用'docker-compose up'或你的命令時,我發現它不會從存檔中取出軟件包。是的,我可以看到db_1正在運行。 – emre01

+0

嘗試在構建命令之前添加「docker-compose pull」。 – TopperH

回答

3

的體積

volumes: 
    - .:/worklog 

基本上掩蓋你與安裝到/工作日誌中構建的一切在主機上的文件t,包括/ worklog/node_modules(如果有的話)。你可以嘗試

volumes: 
    - .:/worklog 
    - /worklog/node_modules 

我認爲覆蓋從容器/工作日誌/ node_modules上安裝從主機再次使node_modules可見的應用程序的目錄上。

+0

謝謝。非常明確的解釋。 – emre01