用于angular-cli应用程序的Dockerfile返回ng:command not found

我试图运行我的Angular应用程序(用ng-cli生成)在docker文件中。

这是我的docker文件:

FROM node:6.10.0 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install --dev && npm cache clean COPY . /usr/src/app CMD [ "ng", "serve" ] 

然而,这与命令崩溃:

ng:命令未find

这怎么可能? Angular CLI列在我的package.json的开发依赖中。

  "devDependencies": { "@angular/cli": "1.4.4", "@angular/compiler-cli": "^4.2.4", "@angular/language-service": "^4.2.4", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", "codelyzer": "~3.2.0", ... 

问题是在$PATHvariables中找不到命令ng 。 当你运行npm install --dev它会在你的项目范围内安装你的依赖关系。

通过您的package.json中的scripts属性调用的命令将能够find您的本地依赖项。

示例package.json:

 { "name": "example-package", "version": "1.0.0", "description": "Example package that starts ng", "scripts": { "start": "ng serve" }, "author": "", "license": "ISC", "devDependencies": { ... } } 

Dockerfile:

 FROM node:6.10.0 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install --dev && npm cache clean COPY . /usr/src/app CMD [ "npm", "start" ] 

请注意,npm只支持一些开箱即用的脚本。 如果你想运行任意脚本,你可以使用npm run-script ...命令。

 ... "scripts" : { "ng-serve": "ng serve" } ... 

通过调用: npm run-script ng-serve

你可以在这里的npm文档中find默认脚本和更多信息的完整列表: https ://docs.npmjs.com/misc/scripts