Docker 构建在 npm install 失败

问题描述 投票:0回答:3

嗨,我正在尝试将 docker 与 Angular 应用程序一起使用,但是当我运行 npm install 时,它在 npm install 时失败,而“本地”我没有收到那些依赖项错误/警告。

这是来自 docker build 的错误日志:

 > [node 4/6] RUN npm install:
#12 9.943 npm notice
#12 9.943 npm notice New patch version of npm available! 7.5.1 -> 7.5.2
#12 9.944 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.5.2>
#12 9.944 npm notice Run `npm install -g [email protected]` to update!
#12 9.944 npm notice
#12 9.950 npm ERR! code ERESOLVE
#12 9.956 npm ERR! ERESOLVE unable to resolve dependency tree
#12 9.956 npm ERR!
#12 9.956 npm ERR! While resolving: [email protected]
#12 9.956 npm ERR! Found: [email protected]
#12 9.956 npm ERR! node_modules/typescript
#12 9.956 npm ERR!   dev typescript@"^4.1.3" from the root project
#12 9.957 npm ERR!   peer typescript@"~4.0.0 || ~4.1.0" from @angular-devkit/[email protected]
#12 9.957 npm ERR!   node_modules/@angular-devkit/build-angular
#12 9.957 npm ERR!     dev @angular-devkit/build-angular@"^0.1101.2" from the root project
#12 9.957 npm ERR!   2 more (@angular/compiler-cli, ng-packagr)
#12 9.957 npm ERR!
#12 9.957 npm ERR! Could not resolve dependency:
#12 9.957 npm ERR! peer typescript@"~3.9.5" from [email protected]
#12 9.957 npm ERR! node_modules/tsickle
#12 9.957 npm ERR!   peerOptional tsickle@"~0.39.0" from [email protected]
#12 9.958 npm ERR!   node_modules/ng-packagr
#12 9.958 npm ERR!     peerOptional ng-packagr@"^11.0.0 || ^11.1.0-next" from @angular-devkit/[email protected]
#12 9.958 npm ERR!     node_modules/@angular-devkit/build-angular
#12 9.958 npm ERR!       dev @angular-devkit/build-angular@"^0.1101.2" from the root project
#12 9.958 npm ERR!
#12 9.958 npm ERR! Fix the upstream dependency conflict, or retry
#12 9.958 npm ERR! this command with --force, or --legacy-peer-deps
#12 9.959 npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
#12 9.959 npm ERR!
#12 9.959 npm ERR! See /root/.npm/eresolve-report.txt for a full report.
#12 9.967
#12 9.967 npm ERR! A complete log of this run can be found in:
#12 9.967 npm ERR!     /root/.npm/_logs/2021-02-04T09_16_48_306Z-debug.log

这是 vscode 中 npm install 的日志:

npm WARN @angular/[email protected] requires a peer of rxjs@^5.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none is installed. You must install peer dependencies yourself.
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\watchpack-chokidar2\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\webpack-dev-server\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

据我所知,可选行适用于 mac 用户,我使用的是 windows 10 build 18363 我不使用任何

@angular/http
而是“@angular/commons/http”,我无法摆脱这些警告,但我认为这不会导致错误。

这里是 package.json 文件:

{
  "name": "hotel-manager",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^11.1.2",
    "@angular/cdk": "^11.1.1",
    "@angular/common": "^11.1.2",
    "@angular/compiler": "^11.1.2",
    "@angular/core": "^11.1.2",
    "@angular/forms": "^11.1.2",
    "@angular/localize": "^11.1.2",
    "@angular/material": "^11.1.1",
    "@angular/platform-browser": "^11.1.2",
    "@angular/platform-browser-dynamic": "^11.1.2",
    "@angular/router": "^11.1.2",
    "@ng-bootstrap/ng-bootstrap": "^9.0.2",
    "@types/jquery": "^3.5.5",
    "angular-font-awesome": "^3.1.2",
    "animate.css": "^4.1.1",
    "bootstrap": "^4.6.0",
    "font-awesome": "^4.7.0",
    "jquery": "^3.5.1",
    "ng-editable-table": "^0.3.15",
    "popper.js": "^1.16.1",
    "rxjs": "~6.6.3",
    "tslib": "^2.0.0",
    "zone.js": "~0.10.2"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.1101.2",
    "@angular/cli": "^11.1.2",
    "@angular/compiler-cli": "^11.1.2",
    "@angular/language-service": "^11.1.2",
    "@types/jasmine": "~3.6.0",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "^12.19.16",
    "codelyzer": "^6.0.0",
    "jasmine-core": "~3.6.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~5.2.3",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "protractor": "~7.0.0",
    "ts-node": "~7.0.0",
    "tslint": "~6.1.0",
    "typescript": "^4.1.3"
  }
}

和 nginx.prod.docker 文件:

# Stage 1
FROM node:latest as node
LABEL  author = 'Sunflame'
WORKDIR /app
COPY package.json package.json
RUN npm install
COPY . .
RUN npm run build -- --prod

# Stage 2
FROM nginx:latest
VOLUME /var/cache/nginx
COPY --from=node /app/dist /usr/share/nginx/html
COPY  nginx.conf /etc/nginx/conf.d/default.conf

我使用以下命令构建:

docker build -t nginx-angular -f nginx.prod.dockerfile .

你能帮我看看我做错了什么吗?

angular docker nginx npm
3个回答
4
投票

如评论中所述,在 docker 文件中添加一个步骤,将

package-lock.json
文件复制到目标位置。

它在本地机器上运行的原因是因为

package-lock.json
告诉 npm 要安装的确切版本。例如,
Typescript
^4.1.3
中被列为
package.json
。在您的本地机器上,它可能已经安装为
4.1.3
(检查您的
package-lock.json
)文件。然而,在生产机器上,它可能安装了
4.2.1
版本之类的。因此,即使您列出了
4.1.3
,但由于
^
前缀,它实际上会引入更高版本,这意味着您可以安装更高的次要版本和补丁版本。因此,您可能期望
4.1.3
或本地计算机上的任何版本,生产服务器可能安装了更新得多的版本,因为它没有引用在本地计算机中创建的
package-lock.json
文件。

查看

^
~
在此答案中的含义 - package.json 中波浪号 (~) 和插入符 (^) 的区别是什么?


0
投票

或者你可以删除你的 package-look.json 它对我有用。


0
投票

下面为我工作。

  1. 删除 package-lock.json 文件。或
  2. 将步骤更改为 COPY package.json ./
© www.soinside.com 2019 - 2024. All rights reserved.