【问题标题】:On server startup NPM find start script在服务器启动时 NPM 找到启动脚本
【发布时间】:2015-09-09 19:12:59
【问题描述】:

我正在使用 docker,我想知道如何在不通过命令行执行的情况下获取命令 npm start 来定位 app.js 文件。

我的 package.json(位于:/srv/www)看起来是这样的:

{
  "name": "dist",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "forever start -c \"nodemon --harmony\" app.js --exitcrash"
  },
  "author": "",
  "license": "ISC"
}

我目前正在调用我的 docker 镜像:

docker run -d -v /srv/docker/instantynode/srv:/srv -p 80:8080 myimg ???

我希望替换 ???使用将启动 node 并在正确目录中调用 npm start 的命令,有什么想法吗?

我想也许可以制作一个小启动脚本来解决这个问题,但是我想知道 npm 是否可以自己解决这个问题?

【问题讨论】:

    标签: node.js docker containers


    【解决方案1】:

    关于节点应用,可以在Dockerfile中以ONBUILD开头,可以尝试如下:

    $ cat Dockerfile
    FROM node:0.10-onbuild   (or version 0.12, depend your request)
    
    PORT 8000
    

    图片node:0.10-onbuild已经有如下代码:

    WORKDIR /usr/src/app
    ONBUILD COPY package.json /usr/src/app/
    ONBUILD RUN npm install
    ONBUILD COPY . /usr/src/app
    CMD ["npm" "start"]
    

    使用ONBUILD,在docker build 期间,您的node.js(或angularjs)代码将不会复制到图像并且npm install 不会运行。

    但是当你运行容器时,它开始将文件复制到 /usr/src/app 并安装 npm 包。然后启动 npm 服务。

    因此,在您的情况下,您应该可以直接运行您的应用程序,而无需每次都挂载卷。

    # I guess file package.json is under /srv/docker/instantynode/srv
    $ cd /srv/docker/instantynode/srv
    $ cat Dockerfile
    FROM node:0.10-onbuild
    
    PORT 8000
    $ docker build -t myimg .  
    $ docker run -d -p 8000:8000 myimg
    

    就是这样,您现在应该可以通过端口 8000 访问您的应用程序了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2012-11-22
      • 2017-03-21
      • 2021-03-24
      • 2013-09-03
      • 2020-12-21
      相关资源
      最近更新 更多