Node.js 服务器启动时NPM查找启动脚本

Node.js 服务器启动时NPM查找启动脚本,node.js,docker,containers,Node.js,Docker,Containers,我正在与docker合作,我想知道如何让命令npm start定位app.js文件,而不必通过命令行执行 my package.json位于:/srv/www看起来是这样的: { "name": "dist", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "start": "forever start -c \"nodemon --harmony\" app.js --ex

我正在与docker合作,我想知道如何让命令npm start定位app.js文件,而不必通过命令行执行

my 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 ???
我希望能取代???用一个命令将启动节点并在正确的目录中调用npm start,有什么想法吗


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

关于节点应用程序,您可以从ONBUILD in Dockerfile开始,因此您可以尝试以下方法:

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

PORT 8000
映像节点: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构建期间,您的node.js或angularjs代码将不会复制到image,npm安装也不会运行

但是当您运行容器时,它开始将文件复制到/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访问您的应用程序了