[英]httpd Docker image CrashLoopBackOff on Kubernetes
我有一個簡單的 docker 圖像,它在本地運行良好。 它與 apache 的httpd 頁面上的示例基本相同。
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/
根據頁面示例,我可以按如下方式構建和運行我的圖像:
$ docker build -t gcr.io/${PROJECT_ID}/hello-app:v1.
$ docker run -dit --name my-running-app -p 8080:80 <img_id>
然后我前往 http://localhost:8080,一切似乎都在正常工作。
但是,當我嘗試為我的 Google Cloud Kubernetes 實例創建部署時,我的 pod 失敗並到達 CrashLoopBackOff 的CrashLoopBackOff
。 (這是在我將圖像推送到 Google Cloud Registry 之后,以便部署可以從那里獲取圖像。)
我認為這個CrashLoopBackOff
問題是由於我的容器沒有ENTRYPOINT
而發生的; 即,pod 生成,沒有發出任何命令,然后它完成並崩潰。
那我有2個問題:
$ docker run -dit --name my-running-app -p 8080:80 <img_id>
。 我沒有指定容器應該運行 httpd,但它可以嗎? 這是怎么回事?編輯 - 附加信息:
我通過執行以下操作部署到 K8 上:
$ kubectl create deployment hello-app --image=gcr.io/${PROJECT_ID}/hello-app:v1
Kubectl 日志:
$ kubectl logs <pod_name>
standard_init_linux.go:211: exec user process caused "exec format error"
kubectl 描述:
$ kubectl describe pod hello-app-6b89cd98f6-gn65p
Name: <name>
Namespace: default
Priority: 0
Node: <my_node>
Start Time: Mon, 22 Mar 2021 12:32:51 +0200
Labels: app=hello-app
pod-template-hash=6b89cd98f6
Annotations: <none>
Status: Running
IP: 10.12.1.13
IPs:
IP: 10.12.1.13
Controlled By: <replica_set>
Containers:
hello-app:
Container ID: <cid>
Image: <img>
Image ID: <img_id>
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Mon, 22 Mar 2021 15:12:18 +0200
Finished: Mon, 22 Mar 2021 15:12:18 +0200
Ready: False
Restart Count: 36
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-b8p9t (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-b8p9t:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-b8p9t
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BackOff 4m9s (x741 over 164m) kubelet Back-off restarting failed container
CrashLoopBackOff
錯誤意味着 pod 不斷崩潰,並且 kubernetes 已放棄它。 您必須確定導致崩潰的原因。 總的來說,問題的原因可能是:
您可以鍵入watch kubectl describe <pod-name>
在創建 pod 時檢查事件。 但是如果 Pod 啟動后崩潰了,你需要獲取容器日志kubectl logs -f <your-pod-name>
。
閱讀更多: kubernetes-crashloopbackoff 。
正如@ Krishna Chaurasia所說,檢查暗示正在運行的默認命令不是可執行文件的線程- 不同平台的可執行格式可能不同。 正如@Sagar Velankar提到的,在FROM
行中的 Docker 文件中使用--platform
標志指定 linux/amd64 作為目標架構。 請參閱: dockerfile-from 。
您可以使用docker buildx docs.docker.com/docker-for-mac/multi-arch來構建和推送多架構鏡像,kubelet 將使用正確架構拉取鏡像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.