【问题标题】:Unable to dockerize Angular app - sh: ng-openapi-gen: not found无法 dockerize Angular 应用程序 - sh:ng-openapi-gen:未找到
【发布时间】:2021-06-29 23:34:02
【问题描述】:

我正在尝试使用 Docker 和 Docker compose 对 Angular 应用程序进行 dockerize。

Dockerfile 看起来像这样

FROM node:13.10.1-alpine AS build

RUN mkdir /app
RUN apk update && apk add --no-cache git

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install

COPY ./src ./src
COPY *.json ./
COPY *.js ./
COPY .git ./.git

RUN npm run build
FROM nginx:1.19.4-alpine AS dp-fe_nginx
COPY --from=build /usr/src/app/dist/ /usr/share/nginx/html
COPY docker/nginx-default.conf /etc/nginx/conf.d/default.conf
WORKDIR /usr/share/nginx/html
ENTRYPOINT nginx -g 'daemon off;'

Docker-compose.yml 看起来像这样

version: '3.8'
services:
  dp-fe:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - 4200:4200
    networks:
      - dp-fe_network
    volumes:
      - dp-fe_volume

volumes:
  dp-fe_volume:

networks:
  dp-fe_network:
    driver: bridge

package.json 中的任务如下所示

  "scripts": {
    "ng-openapi-gen": "ng-openapi-gen",
    "ng": "ng",
    "start": "npm run ng-openapi-gen && npm run ng --serve",
    "build": "npm run ng-openapi-gen && npm run ng --build -prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  }

ng-openapi-gen 是一个功能,它允许我连接到 swagger 文档并生成与该打开的 api swagger doc 对应的 http 层。

当我在 docker 外运行 runbuild 任务时,它成功完成(应用程序已启动并正在运行,或者存在一个包含已编译应用程序的 dist 文件夹)。

但是当我尝试运行 docker-compose up 时,我收到了这个错误

 > [build 11/11] RUN npm run build:
#17 0.516
#17 0.516 > dp@0.0.0 build /usr/src/app
#17 0.516 > npm run ng-openapi-gen && npm run ng --build -prod
#17 0.516
#17 0.759
#17 0.759 > dp@0.0.0 ng-openapi-gen /usr/src/app
#17 0.759 > ng-openapi-gen
#17 0.759
#17 0.763 sh: ng-openapi-gen: not found
another frames telling me build failed omitted

目标是构建 Angular 应用程序(使用构建任务,所以首先我需要运行该 api 生成任务然后构建整个应用程序),将其放入 nginx 服务器并在端口 4200 上公开它。我是什么做错了吗?

【问题讨论】:

  • 您的package.json(可能在devDependencies 下)中列出了该工具吗?
  • @DavidMaze 是的,这就是问题所在,依赖项是全局安装的。谢谢您的帮助。您能否将其发布为答案,以便我标记它?

标签: angular docker nginx docker-compose dockerfile


【解决方案1】:

Docker 映像是在干净的环境中构建的。它无法访问安装在主机上的 Node 或您在此处全局安装的任何包。

如果您需要这样的工具,您需要确保它包含在您的package.json 文件中,可能在devDependencies 部分中。例如:

npm install --save-dev ng-openapi-gen
docker-compose up -d --build

如果您通过package.json scripts 引用命令,npm run 知道在node_modules 目录中查找二进制文件。这种设置在包源中清楚地说明了究竟需要什么,并且比在构建之前需要知道npm install -g 一个额外的包更好。

(你的docker-compose.yml 有不必要的volumes:,你可以删除它们。许多基于节点的设置将它们的node_modules 树放在一个卷中,如果你这样做,卷的旧内容将始终优先于图片中更改的内容,这意味着package.json中的更改将被忽略。此处删除volumes:将导致使用图片中的代码和模块。)

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2020-01-02
    • 2022-07-07
    • 2018-01-10
    • 2019-06-17
    相关资源
    最近更新 更多