学习NodeJS和MongoDB Docker组成

我有一个使用MongoDB的NodeJS项目。 我想在一个Docker容器中运行这个服务,但是尽pipe有很多例子是基于我的学习的,但这是行不通的。

这是我的/ heimdall_jwt / Dockerfile

FROM node:9-alpine WORKDIR /usr/src/app COPY package.json /usr/src/app RUN npm install RUN npm install pm2 -g COPY . /usr/src/app EXPOSE 3000 CMD ["pm2-docker", "start", "process.json"] 

这里是我的/heimdall_jwt/docker-compose.yml

 version: '2' # Define the services/containers to be run services: myapp: #name of your service build: ./ # specify the directory of the Dockerfile ports: - "3000:3000" #specify ports forwarding links: - database # link this service to the database service volumes: - .:/usr/src/app depends_on: - database database: # name of the service image: mongo # specify image to build container from 

我尝试通过运行: $ docker-compose up –build这导致mongo正在构build和启动。 这里是浓缩的输出:

 Building myapp Step 1/8 : FROM node:9-alpine ... Step 4/8 : RUN npm install ---> Using cache ---> befb91b1324c ... Removing intermediate container 945eb0ad40d5 Successfully built b500f7ec9b89 Successfully tagged heimdalljwt_myapp:latest Creating heimdalljwt_database_1 ... Creating heimdalljwt_database_1 ... done Creating heimdalljwt_myapp_1 ... Creating heimdalljwt_myapp_1 ... done Attaching to heimdalljwt_database_1, heimdalljwt_myapp_1 database_1 | 2017-11-25T21:15:39.001+0000 I INDEX [initandlisten] building index using bulk method; build may temporarily use up to 500 megabytes of RAM database_1 | 2017-11-25T21:15:39.002+0000 I INDEX [initandlisten] build index done. scanned 0 total records. 0 secs database_1 | 2017-11-25T21:15:39.003+0000 I COMMAND [initandlisten] setting featureCompatibilityVersion to 3.4 database_1 | 2017-11-25T21:15:39.005+0000 I NETWORK [thread1] waiting for connections on port 27017 myapp_1 | 0|heimdall | Error: Cannot find module 'bcryptjs' myapp_1 | 0|heimdall | at Function.Module._resolveFilename (module.js:542:15) myapp_1 | 0|heimdall | at Function.Module._load (module.js:472:25) myapp_1 | 0|heimdall | at Module.require (module.js:585:17) myapp_1 | 0|heimdall | at require (internal/module.js:11:18) myapp_1 | 0|heimdall | at Object.<anonymous> (/usr/src/app/user/User.js:2:14) myapp_1 | 0|heimdall | at Module._compile (module.js:641:30) myapp_1 | 0|heimdall | at Object.Module._extensions..js (module.js:652:10) myapp_1 | 0|heimdall | at Module.load (module.js:560:32) myapp_1 | 0|heimdall | at tryModuleLoad (module.js:503:12) myapp_1 | 0|heimdall | at Function.Module._load (module.js:495:3) myapp_1 | 0|heimdall | at Module.require (module.js:585:17) myapp_1 | 0|heimdall | at require (internal/module.js:11:18) myapp_1 | 0|heimdall | at Object.<anonymous> (/usr/src/app/user/UserController.js:12:12) myapp_1 | 0|heimdall | at Module._compile (module.js:641:30) myapp_1 | 0|heimdall | at Object.Module._extensions..js (module.js:652:10) myapp_1 | 0|heimdall | at Module.load (module.js:560:32) myapp_1 | PM2 | App name:heimdall_app id:0 disconnected 

我不确定这里发生了什么,但我猜测,依赖关系要么没有被安装,要么不被复制到工作目录。 怎么样

更新从原始发布修改,因为我仍然努力得到这个工作。

你应该 npm install 复制文件。 现在你正在安装依赖关系,然后复制一切,所以你有效地取消了这个安装,你没有依赖关系。

在你的Dockerfile中你有:

 ... RUN npm install RUN npm install pm2 -g COPY . /usr/src/app ... 

它应该是:

 ... COPY . /usr/src/app RUN npm install RUN npm install pm2 -g ...