我的 Angular 应用程序在本地运行良好,但我还没有弄清楚如何对 Docker 映像执行相同的操作。在 Docker 之外,UI 在端口 4200 上运行,ng serveAPI 提供来自 8080 的数据和node server.js.
我的 Dockerfile 已设置,因此它可以让 Node 服务器运行并在 8080 上可用,但 Angular UI 不会运行。我尝试了几种选择,但现在我有:
FROM node:14.17.3
COPY package*.json ./
EXPOSE 4200 8080
RUN npm install -g @angular/cli
RUN npm install --only=production
COPY . ./
RUN ng serve
CMD ["node", "server.js"]
它失败ng serve并出现错误:The serve command requires to be run in an Angular project, but a project definition could not be found。我在根目录中有一个 angular.json 文件。我不确定我错过了什么。我读到ng serve不应该在这种情况下使用它,但我看到的替代品并没有产生任何影响。
编辑 8/10/21:根据此处的答案和大量研究,这将显示带有 nginx 的 UI:
FROM node:12.16.1-alpine as build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
# RUN npm install -g @angular/cli
# RUN npm run build --prod
FROM nginx:1.15.8-alpine
COPY --from=build /usr/src/app/dist /usr/share/nginx/html
# CMD ["node", "server.js"]
但是,npm run build 步骤失败,因为尽管安装了 @angular/cli,但未找到 ng。我必须手动运行它来构建 dist 文件夹。我不能node server.js和这个一起跑。看来我只能得到前端或后端,不能两者兼而有之。
