如何设置docker入口到NPM?

我有一个使用npm脚本的Node.js项目。 package.json摘录:

  "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build-all": "./node_modules/.bin/webpack --progress --config ./webpack/client.config.js && ./node_modules/.bin/webpack --progress --config ./webpack/server.config.js", "web": "python -m SimpleHTTPServer 8888", "server" : "./node_modules/.bin/electron-spawn ./dist/server.js" }, 

我正在为这个项目创build一个Dockerfile 。 我希望使用npm作为图像的入口点。 在Dockerfile中我有:

ENTRYPOINT ['/usr/local/bin/npm' 'run']

当我尝试启动一个hcontainerforms的图像,它说它无法findnpm

 root@vagrant-ubuntu-trusty-64:/home/vagrant# docker run my_image web web: 1: web: [/usr/local/bin/npm: not found 

如果我在图像中启动一个shell,它看起来像npm可执行文件在那个path

 root@vagrant-ubuntu-trusty-64:/home/vagrant# docker run -i -t --entrypoint /bin/bash my_image root@5e7362a64412:/# ls /usr/local/bin/npm /usr/local/bin/npm 

这个问题似乎是由于ENTRYPOINT中的单引号造成的。 你可以检查是否使用问题解决的双引号?

 ENTRYPOINT ["/usr/local/bin/npm", "run"] 

根据Docker指南 ,写入入口点只有两种forms:

  1. execforms (首选): ENTRYPOINT ["executable", "param1", "param2"]
  2. shellformsENTRYPOINT command param1 param2