【问题标题】:How to set Docker ENTRYPOINT To NPM?如何将 Docker 入口点设置为 NPM?
【发布时间】:2016-05-17 10:50:07
【问题描述】:

我有一个使用 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"
  },

我正在为这个项目创建一个Dockerfile。我希望使用 npm 作为图像的入口点。在 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

如果我在镜像中启动一个 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

【问题讨论】:

  • 虽然,这不是一个好主意,因为npm 不会在容器化设置中将信号传递给子进程,更多信息例如在this summary

标签: docker npm dockerfile


【解决方案1】:

问题似乎是由于 ENTRYPOINT 中的单引号引起的。您能否检查使用双引号是否可以解决问题?

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

根据Docker guide,写ENTRYPOINT只有两种形式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多