Apple M2芯片- Docker和Kubernetes CrashLoopBackOff错误

r8xiu3jd  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(45)

总结除了在docker的build和push以及kubectl apply事件中没有错误之外,我的应用程序pods状态仍然是CrashLoopBackOff错误。(使用Apple M2芯片)

大家好,我和我的同事使用Dart/ Flutter构建了一个移动的应用程序。我们使用Docker/ Kubernetes来虚拟化和运行后端系统。然而,我们是初学者。
我的同事可以通过Docker和Kubernetes CLI进行容器化和创建资源,没有任何问题。然而,除了没有得到错误响应外,在我执行相同的步骤后,我们的Pod的状态仍然是CrashLoopBackOff错误。他使用的是Windows PC,而我使用的是Apple MacBook Air with M2 Chip。
最有可能的是我们在Docker阶段遇到了问题,因为我们试图在他的电脑上做Docker阶段,然后在我的电脑上做kubectl apply -f部分,没有出现任何问题。

  • 我们的Docker文件 *
# Specify the Dart SDK base image version using dart:<version> (ex: dart:2.12)
FROM dart:3.0.7 AS build

# Resolve app dependencies.
WORKDIR /app
COPY . .
# COPY backend/pubspec.* ./
WORKDIR /app/backend
RUN dart pub get

# Copy app source code and AOT compile it.
# Ensure packages are still up-to-date if anything has changed
RUN dart pub get --offline
RUN mkdir -p /bin/server
RUN dart compile exe /app/backend/bin/backend.dart -o bin/server

# Build minimal serving image from AOT-compiled `/server` and required system
# libraries and configuration files stored in `/runtime/` from the build stage.
FROM scratch
COPY --from=build /runtime/ /
COPY --from=build /app/backend/bin/server /app/bin/

# Start server.
EXPOSE 7001
CMD ["/app/bin/server"]

字符串

  • 我们的Kubernetes.yaml文件 *
apiVersion: apps/v1
kind: Deployment
metadata:
  name: appName-deployment
  labels:
    app: appName
spec:
  replicas: 3
  selector:
    matchLabels:
      app: appName
  template:
    metadata:
      labels:
        app: appName
    spec:
      containers:
        - name: appName
          image: appName/backend:1.0.26
          ports:
            - containerPort: 7001
              name: grpc
            - containerPort: 7002
              name: api
      imagePullSecrets:
        - name: regcred
---
apiVersion: v1
kind: Service
metadata:
  name: appName-service
spec:
  type: NodePort
  selector:
    app: appName
  ports:
    - protocol: TCP
      name: grpc
      port: 7001
      targetPort: 7001
      nodePort: 32000
    - protocol: TCP
      name: api
      port: 7002
      targetPort: 7002
      nodePort: 32002

qfe3c7zg

qfe3c7zg1#

在使用docker build命令构建映像时,您必须使用--platform=linux/amd64选项。您的Mac M2具有ARM处理器,而集群的节点(可能)使用AMD处理器。
更多信息here .

nimxete2

nimxete22#

我已经成功地在我的MacBook M1 Pro上使用了qemu驱动程序和minikube。安装minikube并使用Docker进行构建的一般步骤如下:
假设brew is installed

$ brew install qemu
$ brew install minikube
$ brew install docker
$ brew install docker compose
$ brew install socket_vmnet
$ brew tap homebrew/services
$ HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet\

$ minikube start --driver=qemu --network socket_vmnet

$ eval $(minikube docker-env)
$ echo "`minikube ip` docker.local" | sudo tee -a /etc/hosts > /dev/null

字符串
请将eval $(minikube docker-env)添加到~/.zshrc(或等效的终端配置文件)
要使minikube正确地路由流量,请使用隧道:

$ minikube tunnel


之后,您应该能够在本地构建和运行Docker映像:

$ docker build -t <IMAGE_NAME> .
$ docker run -p <SERVER_PORT>:8080 <IMAGE_NAME>

相关问题