我正在与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是否能解决这个问题?
答案 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访问您的应用程序了。