【问题标题】:How to create Angular Universal Dockerfile and docker-compose.yml file?如何创建 Angular Universal Dockerfile 和 docker-compose.yml 文件?
【发布时间】:2020-08-02 07:05:36
【问题描述】:

所以我正在尝试对我的 Angular 通用应用程序进行 Docker 化,以将其与已经 docker 化的 spring boot rest 后端一起使用,我发现很难在互联网上获得一些帮助和资源。在这里,我有一个 Angular 通用的 Dockerfile 示例,但尽管我做了一些更改,但它对我不起作用。

FROM node:12-alpine as buildContainer
WORKDIR /app
COPY ./package.json ./package-lock.json /app/
RUN npm install
COPY . /app
RUN npm run build:universal
# RUN npm run generate:pretender
RUN npm run test:ssr

FROM node:8-alpine

WORKDIR /app
# Copy dependency definitions
COPY --from=buildContainer /app/package.json /app
# COPY --from=buildContainer /app/server.js /app

# Get all the code needed to run the app
COPY --from=buildContainer /app/dist /app/dist
# COPY --from=buildContainer /app/static /app/static
COPY --from=buildContainer /app/dist-server /app/dist-server

# Expose the port the app runs in
EXPOSE 4200

# Serve the app
CMD ["npm", "run", "server"]

我正在使用以下命令 docker build -t angular-universal . 构建图像,但它在第 6 步失败说

npm 错误!缺少脚本:构建:通用 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! /root/.npm/_logs/2020-04-19T20_29_16_368Z-debug.log 命令 '/bin/sh -c npm run build:universal' 返回非零代码:1

有人遇到同样的问题吗?

这是我的 package.json

{
"name": "jobnow",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve --host 0.0.0.0",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "deploy": "ng deploy --base-href=https://samgevorgyan.github.io/jobnow/"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~9.0.1",
    "@angular/cdk": "^9.0.0",
    "@angular/common": "~9.0.1",
    "@angular/compiler": "~9.0.1",
    "@angular/core": "~9.0.1",
    "@angular/flex-layout": "^9.0.0-beta.29",
    "@angular/forms": "~9.0.1",
    "@angular/material": "^9.0.0",
    "@angular/material-moment-adapter": "^9.1.2",
    "@angular/platform-browser": "~9.0.1",
    "@angular/platform-browser-dynamic": "~9.0.1",
    "@angular/router": "~9.0.1",
    "@capacitor/android": "^1.5.0",
    "@capacitor/angular": "^1.0.2",
    "@capacitor/core": "latest",
    "@fortawesome/angular-fontawesome": "^0.6.1",
    "@fortawesome/fontawesome-svg-core": "^1.2.28",
    "@fortawesome/free-brands-svg-icons": "^5.13.0",
    "@fortawesome/free-regular-svg-icons": "^5.13.0",
    "@fortawesome/free-solid-svg-icons": "^5.13.0",
    "@gilsdav/ngx-translate-router": "^3.0.0",
    "@gilsdav/ngx-translate-router-http-loader": "^1.1.0",
    "@ngrx/effects": "^8.6.0",
    "@ngrx/store": "^8.6.0",
    "@ngrx/store-devtools": "^8.6.0",
    "@ngx-translate/core": "^12.1.2",
    "@ngx-translate/http-loader": "^4.0.0",
    "@types/googlemaps": "^3.39.3",
    "angular-cli-ghpages": "^0.6.2",
    "crypto-ts": "^1.0.2",
    "moment": "^2.24.0",
    "ngx-cookie-service": "^3.0.3",
    "ngx-image-cropper": "^3.1.6",
    "ngx-toastr": "^12.0.0",
    "rxjs": "~6.5.4",
    "tslib": "^1.10.0",
    "zone.js": "~0.10.2"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.901.0",
    "@angular/cli": "^9.1.0",
    "@angular/compiler-cli": "~9.0.1",
    "@angular/language-service": "~9.0.1",
    "@capacitor/cli": "latest",
    "@types/jasmine": "~3.5.4",
    "@types/jasminewd2": "~2.0.8",
    "@types/node": "~13.7.1",
    "codelyzer": "^5.2.1",
    "jasmine-core": "~3.5.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^5.0.1",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~2.1.1",
    "karma-jasmine": "~3.1.1",
    "karma-jasmine-html-reporter": "^1.5.2",
    "protractor": "~5.4.3",
    "ts-node": "~8.6.2",
    "tslint": "^6.1.1",
    "typescript": "^3.7.5"
  }
}

【问题讨论】:

  • 您可以在本地开发设置中的 Docker 外部运行相同的 npm 命令吗?你能包含更多的错误日志吗?
  • 请添加你的 package.json
  • 我的本地开发设置或多或少运行良好,每次我执行 npm install 后,它都会显示“执行 npm audit fix”,但应用程序引导并与后端服务正常通信。我想我在 package.json 中缺少 "scripts":{} 定义,这就是为什么 "universal" 对我不起作用的原因。

标签: angular docker dockerfile containers angular-universal


【解决方案1】:

可能有点晚,但在您的 Dockerfile 中:

运行 npm run build:universal

你需要在你的 package.json 中有一个这样的脚本:

"build:universal": "ng build --prod && ng run jobnow:server:production"

还有这一行:

运行 npm 运行测试:ssr

您可以像这样删除它或添加另一个脚本:

"test:ssr": "run-p test:ssr:*"

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2017-03-12
    • 1970-01-01
    • 2018-05-16
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多