angular - Angular 不会部署 Docker 桌面 + Kubernetes
问题描述
我正在尝试使用 Docker Desktop 和 Kubernetes 在我的 MAC 上运行 Angular CLI 项目。我这里有一个 dockerfile,它在严格通过 docker 运行图像时工作正常。
FROM node:14.16.0-alpine3.13 as node
WORKDIR /app
COPY package.json package.json
RUN npm install
COPY . .
RUN npm run build -- --prod
FROM nginx:alpine
VOLUME /var/cache/nginx
COPY --from=node /app/dist/ngDockerApp/* /usr/share/nginx/html/
COPY ./config/nginx.conf /etc/nginx/conf.d/default.conf
nginx配置文件在这里:
server {
listen 0.0.0.0:80;
listen [::]:80;
default_type application/octet-stream;
gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
client_max_body_size 256M;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html =404;
}
}
当我运行docker run -d -p 8080:80 nginx-angular
它时,它会旋转图像并运行良好。但是,我有一个 kubernetes 部署,我试图通过 docker desktop 运行,但不知道我做错了什么,以及为什么我不能启动它。
部署文件在这里:
apiVersion: v1
kind: Service
metadata:
name: ui-svc
labels:
app: ui
spec:
type: NodePort
selector:
app: ui
ports:
- port: 80
targetPort: 80
nodePort: 31000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ui
labels:
app: ui
spec:
replicas: 1
selector:
matchLabels:
app: ui
template:
metadata:
labels:
app: ui
spec:
containers:
- name : ui
image: nginx-angular
imagePullPolicy: Never
ports:
- containerPort: 80
resources:
limits:
memory: "500Mi"
cpu: "90m"
编辑
## kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/ui-6cc55b59c4-24tv7 1/1 Running 0 7s 10.1.0.124 docker-desktop <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21d <none>
service/ui-svc NodePort 10.100.72.12 <none> 80:31000/TCP 8s app=ui
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/ui 1/1 1 1 8s ui nginx-angular app=ui
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/ui-6cc55b59c4 1 1 1 8s ui nginx-angular app=ui,pod-template-hash=6cc55b59c4
## kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
docker-desktop Ready master 21d v1.19.7 192.168.65.4 <none> Docker Desktop 4.19.121-linuxkit docker://20.10.5
澄清一下,10.100.72.12:31000 (nodeport) 和 192.168.65.4:31000 不起作用。
我试过localhost:80,我也试过内部节点IP地址:80,没有任何显示。我错过了什么?
解决方案
这是我发现的。对于本地部署,运行kubectl cluster info
. 这给了我以下信息:
$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
然后我http://kubernetes.docker.internal:<nodeport>
把它放在浏览器中。然后我可以看到我的应用程序。
推荐阅读
- java - 为 hazelcast 创建自定义发现策略的问题
- c# - 自定义验证属性的 ValidationContext 缺少一个字段
- flutter - 为什么我的列表在从文本字段颤动中获取值后没有更新
- html - 为什么使用 flutter_html 包在我的 Flutter 应用程序中没有显示和html 元素?
- c# - 如何将 Magick.NET LosslessCompress 与 Stream 和 IFormFile 一起使用
- neo4j - 将具有不同标签的节点合并为具有两个标签的新节点
- c++ - Xcode 10.2 中的新 C++ 项目未构建
- c++ - 这个嵌套结构声明是什么意思?
- android - 影子 PackageParser.call ParsePackage PackageParser$Packageparserexception
- markers - 如何获得 SSML来自 Google Cloud 文本转语音 API 的时间戳