GKE部署从Artifact Registry拉取镜像时遇CrashLoopBackOff问题求助
问题分析与解决方案
核心错误定位
exec /docker-entrypoint.sh: exec format error 这个报错主要指向两类问题:
- 镜像CPU架构与GKE节点架构不兼容
- 自定义shell脚本的换行符格式不符合Linux系统要求
具体排查与修复步骤
1. 检查GKE节点架构
先确认集群节点的CPU架构是否和镜像指定的linux/amd64匹配:
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.architecture}{"\n"}{end}'
如果输出是arm64,说明节点架构和镜像不匹配,可选择:
- 构建同时支持amd64/arm64的多架构镜像
- 将GKE节点池更换为amd64架构类型
2. 修复脚本换行符格式
如果docker-entrypoint.sh是在Windows环境下编写的,换行符会是CRLF格式,Linux系统无法正确解析shebang(#!/bin/sh)。修复方式:
- 在Linux/macOS环境下执行:
sed -i 's/\r$//' docker-entrypoint.sh
- 或在编辑器(如VS Code)中将文件换行符设置为LF,再重新构建镜像
3. 重新构建并推送镜像
确保脚本权限和格式正确后,重新构建推送:
# 构建镜像 docker build --platform=linux/amd64 -t europe-west4-docker.pkg.dev/jenkins-389117/test-images/test:1.0.1 . # 推送至Artifact Registry docker push europe-west4-docker.pkg.dev/jenkins-389117/test-images/test:1.0.1 # 更新Deployment镜像版本 kubectl set image deployment/hochzeitsautoschwerin testdeployment=europe-west4-docker.pkg.dev/jenkins-389117/test-images/test:1.0.1 -n hochzeitsautoschwerin
4. 临时验证:跳过自定义entrypoint
修改Deployment直接启动nginx,验证是否为脚本问题:
apiVersion: apps/v1 kind: Deployment metadata: name: hochzeitsautoschwerin namespace: hochzeitsautoschwerin spec: selector: matchLabels: app: hochzeitsautoschwerin strategy: type: Recreate template: metadata: labels: app: hochzeitsautoschwerin spec: containers: - image: europe-west4-docker.pkg.dev/jenkins-389117/test-images/test:1.0.0 name: testdeployment ports: - containerPort: 8080 name: web resources: limits: cpu: "0.2" memory: "256Mi" requests: cpu: "0.1" memory: "100Mi" # 替换为直接启动nginx的命令 command: ["nginx"] args: ["-g", "daemon off;"]
如果此配置能正常运行,说明问题完全出自自定义entrypoint脚本。
内容的提问来源于stack exchange,提问作者leonms
相关产品推荐
相关产品推荐

