在服务器启动时,NPM查找启动脚本

时间:2015-09-09 01:25:28

标签: node.js docker containers

我正在与docker合作,我想知道如何在没有通过命令行执行此操作的情况下找到npm start命令{。}}。

我的package.json(位于:app.js)看起来如此:

/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 run -d -v /srv/docker/instantynode/srv:/srv -p 80:8080 myimg ??? 并在正确的目录中调用node,任何想法?

我在考虑制作一个小小的启动脚本来解决这个问题,但是我想知道npm是否能解决这个问题?

1 个答案:

答案 0 :(得分:0)

关于节点应用程序,您可以从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访问您的应用程序了。