首页 > 解决方案 > 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,没有任何显示。我错过了什么?

标签: angulardockernginxkubernetes

解决方案


这是我发现的。对于本地部署,运行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>把它放在浏览器中。然后我可以看到我的应用程序。


推荐阅读