如何将Docker ENTRYPOINT设置为NPM?

kev*_*ler 4 npm docker dockerfile

我有一个使用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"
  },
Run Code Online (Sandbox Code Playgroud)

我正在Dockerfile为这个项目创建一个.我希望使用npm作为图像的ENTRYPOINT.在Dockerfile中我有:

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

当我尝试从图像中启动一个hcontainer它说它无法找到npm

root@vagrant-ubuntu-trusty-64:/home/vagrant# docker run my_image web
web: 1: web: [/usr/local/bin/npm: not found
Run Code Online (Sandbox Code Playgroud)

如果我在图像中启动一个shell,看起来npm可执行文件就在那条路径上

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
Run Code Online (Sandbox Code Playgroud)

Jes*_*oco 11

这个问题似乎是由ENTRYPOINT中的单引号引起的.你能检查问题是否使用双引号?

ENTRYPOINT ["/usr/local/bin/npm", "run"]
Run Code Online (Sandbox Code Playgroud)

根据Docker指南,只有两种形式来编写ENTRYPOINT:

  1. 执行形式(首选):ENTRYPOINT ["executable", "param1", "param2"]
  2. 外壳形式:ENTRYPOINT command param1 param2