【问题标题】:Create a docker container from an angular project从 Angular 项目创建一个 docker 容器
【发布时间】:2021-11-05 08:50:39
【问题描述】:

我想根据我的 Angular 项目创建一个 docker 容器。 这是我的 dockerfile:

# here we dockerize angular app
FROM node:12-alpine3.11

WORKDIR /usr/local/lib


COPY .  /usr/local/lib/

RUN npm install

RUN npm run build

EXPOSE 4200
CMD [ "node", "server.js" ]

dockerfile 位于我的 Angular 项目的目录中,其中包含除 node_modules 之外的所有文件。 当我尝试构建我的 docker 映像时,我到达构建阶段并收到此错误: “./node_modules/primeng/fesm2015/primeng-chart.js:4:0-34 - 错误:找不到模块:错误:无法解析'/usr/local/lib/node_modules中的'chart.js/auto' /primeng/fesm2015'"

这是我的 package.json

{
 "name": "acm_jenkins_web",
 "version": "0.0.0",
 "scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test",
"sonar-scanner": "sonar-scanner"
},
"private": true,
"dependencies": {
"@angular/animations": "^12.2.2",
"@angular/cdk": "^12.2.2",
"@angular/common": "~12.0.3",
"@angular/compiler": "~12.0.3",
"@angular/core": "~12.0.3",
"@angular/forms": "~12.0.3",
"@angular/platform-browser": "~12.0.3",
"@angular/platform-browser-dynamic": "~12.0.3",
"@angular/router": "~12.0.3",
"@ngx-translate/core": "^13.0.0",
"@ngx-translate/http-loader": "^6.0.0",
"bootstrap": "^3.0.0",
"chart.js": "^2.9.4",
"jquery": "^3.6.0",
"ngx-toastr": "^14.0.0",
"popper.js": "^1.16.1",
"primeicons": "^4.1.0",
"primeng": "^12.0.0-rc.1",
"rxjs": "~6.6.0",
"tslib": "^2.1.0",
"zone.js": "~0.11.4"
 },
 "devDependencies": {
"@angular-devkit/build-angular": "~12.0.3",
"@angular/cli": "~12.0.3",
"@angular/compiler-cli": "~12.0.3",
"@types/jasmine": "~3.6.0",
"@types/node": "^12.11.1",
"jasmine-core": "~3.7.0",
"karma": "~6.3.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"typescript": "~4.2.3",
"sonar-scanner": "^3.1.0"
 }
 }

【问题讨论】:

  • 我猜这是 SSR 应用,对吗?
  • 不熟悉这个词

标签: node.js angular docker dockerfile


【解决方案1】:

您是否在本地机器(不是 docker)上尝试过这些步骤?

  • 彻底删除本地node_modules文件夹
  • 使用npm i安装deps
  • 在本地机器上运行npm build

如果你遇到同样的问题,原因可能是安装了这两个包的错误版本,你可以这样挖掘:

"chart.js": "^2.9.4",
...
"primeng": "^12.0.0-rc.1",

否则,您可以在上述步骤之后保存package-lock.json,然后尝试运行npm ci 命令而不是npm install

如果有什么不正确的deps应该会有所帮助

【讨论】:

  • 小注释:当你在本地机器上运行npm build时要小心,文件夹dist会被创建,应该使用`COPY命令复制到docker容器中。 /usr/local/lib/`.这是多余的,所以你应该防止复制。
  • 我完成了上述所有操作,但仍然出现 chart.js 错误
  • @YoussefBoudaya 当您直接在您的计算机上运行npm build 而不构建 docker 映像时,您是否遇到了同样的错误?
  • 你的意思是 ng build ?是的
  • 那么您可以尝试这里的建议,因为 docker 没有问题:github.com/primefaces/primeng/issues/7887
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多