简体   繁体   English

学习NodeJS和MongoDB Docker撰写

[英]Learning NodeJS & MongoDB Docker compose

I have a NodeJS project that uses MongoDB. 我有一个使用MongoDB的NodeJS项目。 I would like to run this service in a Docker container, but despite the many examples I have based my learning from, this will not work. 我想在Docker容器中运行这个服务,但是尽管有许多基于我学习的例子,但这不起作用。

Here is my /heimdall_jwt/Dockerfile : 这是我的/ 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"]

And here is my /heimdall_jwt/docker-compose.yml 这是我的/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

I tried running via: $docker-compose up --build which results in the mongo being build and starting. 我尝试运行: $ docker-compose up --build导致mongo正在构建和启动。 Here is the condensed output: 这是浓缩输出:

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

I am uncertain what is going on here, but I am guessing that the dependencies are either not being installed, or not being copied into the working directory. 我不确定这里发生了什么,但我猜测依赖关系要么没有安装,要么没有被复制到工作目录中。 How 怎么样

UPDATED Modified from original posting as I still am struggling to get this to work. 更新从原始帖子修改,因为我仍在努力让这个工作。

You should copy files after npm install . 你应该 npm install 之后复制文件。 Right now you are installing dependencies and then copying over everything, so you are effectively canceling that install and you don't have dependencies. 现在,您正在安装依赖项,然后复制所有内容,因此您实际上取消了该安装,并且您没有依赖项。

In your Dockerfile you have: 在您的Dockerfile中,您有:

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

It should be: 它应该是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM