You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行Angular应用访问页面出现'Cannot GET /'错误

问题根因

Cannot GET / 报错和你修改的angular.json里的aot配置没有任何关系,本质是容器内启动的Web服务没有正确托管Angular编译生成的静态资源,找不到根路径对应的index.html文件。
从你贴的配置看,核心问题有两个:

  • 执行完npm run build后,Angular编译产物默认会输出到dist/[你的项目名]目录,但你最终启动的server.js既没有在构建流程中做对应路径配置,也没有正确指向dist目录的静态资源,自然无法响应根路径请求。
  • 如果你本意是在容器里跑Angular开发调试服务,那你既不需要提前执行build,也不需要启动node服务跑server.js。

修复方案

根据你的使用场景二选一即可:

方案一:本地调试用,直接跑开发服务

修改Dockerfile,移除build和server.js相关逻辑,直接启动Angular内置dev server:

WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g @angular/cli@14
RUN npm install
COPY . ./
EXPOSE 4200
CMD ["npm", "start"]

注意你的start脚本已经配置了--host 0.0.0.0允许外部访问,启动容器后映射4200端口访问即可,不要用原来写的8080端口。


方案二:生产部署用,Nginx托管静态产物

生产环境不要用ng serve,也没必要自己写server.js做静态服务,直接用Nginx托管编译后的静态文件性能更好,用多阶段构建还能大幅缩小镜像体积,Dockerfile参考如下:

# 第一阶段:编译Angular项目
FROM node:18-alpine AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g @angular/cli@14
RUN npm install
COPY . ./
RUN npm run build --prod

# 第二阶段:启动Nginx服务
FROM nginx:alpine
# 注意把下面路径里的your-project-name替换成你angular.json里配置的项目名,也就是ng build后dist目录下生成的文件夹名
COPY --from=builder /usr/src/app/dist/your-project-name/ /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

替换完实际项目名后构建镜像,启动容器时映射80端口即可正常访问。

如果你一定要用自定义的server.js托管服务,必须确认两个前提:一是server.js文件确实存放在项目根目录会被复制进镜像,二是server.js里配置的静态资源根路径正确指向npm run build生成的dist产物目录,否则服务找不到index.html就会持续报这个错。

内容的提问来源于stack exchange,提问作者Gustavo Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:30:57