代码之家  ›  专栏  ›  技术社区  ›  sonoerin

学习NodeJS和MongoDB Docker compose

  •  5
  • sonoerin  · 技术社区  · 8 年前

    我有一个使用MongoDB的NodeJS项目。我希望在Docker容器中运行此服务,但尽管我学习了许多示例,但这不会起作用。

    这是我的 /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撰写。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组装--构建

    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
    

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

    已更新 修改从原来的张贴,因为我仍在努力使这个工作。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Robert    8 年前

    你应该复制文件 之后 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
    ...