在 OpenShift 上部署 Angular 应用时,如果遇到 sh: ng: command not found
错误,通常是因为在启动脚本中找不到 ng
命令。以下是解决这个问题的步骤:
如果你使用 Dockerfile 来构建和部署应用,确保在 Dockerfile 中全局安装了 Angular CLI。
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 全局安装 Angular CLI
RUN npm install -g @angular/cli
# 复制项目文件
COPY . .
# 构建 Angular 应用
RUN ng build --prod
# 暴露应用端口
EXPOSE 80
# 启动应用
CMD ["npx", "http-server", "dist/your-app-name"]
如果你使用 OpenShift 的构建配置(BuildConfig),确保在构建过程中安装 Angular CLI。
如果你使用 Source-to-Image (S2I) 构建,确保在 .s2i/bin/assemble
脚本中安装 Angular CLI。
#!/bin/bash
# 安装项目依赖
npm install
# 全局安装 Angular CLI
npm install -g @angular/cli
# 构建 Angular 应用
ng build --prod
在 OpenShift 的部署配置(DeploymentConfig)中,确保使用正确的启动命令。如果你在 Dockerfile 中已经构建了应用,可以使用 npx http-server
来启动应用。
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: your-app-name
spec:
replicas: 1
selector:
app: your-app-name
template:
metadata:
labels:
app: your-app-name
spec:
containers:
- name: your-app-name
image: your-docker-image
ports:
- containerPort: 80
command: ["npx", "http-server", "dist/your-app-name"]
triggers:
- type: ConfigChange
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- your-app-name
from:
kind: ImageStreamTag
name: 'your-docker-image:latest'
有时,环境变量可能会影响命令的执行。确保在 OpenShift 中设置了正确的环境变量。
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: your-app-name
spec:
replicas: 1
selector:
app: your-app-name
template:
metadata:
labels:
app: your-app-name
spec:
containers:
- name: your-app-name
image: your-docker-image
ports:
- containerPort: 80
env:
- name: NODE_ENV
value: production
command: ["npx", "http-server", "dist/your-app-name"]
triggers:
- type: ConfigChange
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- your-app-name
from:
kind: ImageStreamTag
name: 'your-docker-image:latest'
如果问题仍然存在,检查 OpenShift 的构建和部署日志,以获取更多调试信息。
oc logs build/your-build-name
oc logs dc/your-deployment-config-name
领取专属 10元无门槛券
手把手带您无忧上云