【发布时间】:2021-10-03 11:12:50
【问题描述】:
我的 Angular 应用程序在本地运行良好,但我还没有弄清楚如何对 Docker 映像执行相同的操作。在 Docker 之外,UI 使用 ng serve 在端口 4200 上运行,API 使用 node server.js 提供来自 8080 的数据。
我的 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。看来我只能得到前端或后端,而不是两者。
【问题讨论】:
-
你能发一张你工作区的截图吗?
-
ng serve仅用于开发 -
@robert 我已经读过,但还没有找到替代产品。
-
我认为你需要告诉
node在 Angular 运行构建后在/dist中提供js文件。就像@robert 所说,ng serve是一个开发命令。 -
"prod" 替代方案可以是任何可以提供静态文件的 http 服务器(Apache、nginx、节点)。编译 Angular 项目后,结果是很少的 js、html 和 css 文件,通常位于
dist文件夹中。您需要在您的网络服务器下复制该文件夹的内容。
标签: node.js angular docker google-cloud-platform