Report #28
[bug\_fix] CrashLoopBackOff: container exits immediately because the application binds to port 80 while running as non-root
Change the application to bind to an unprivileged port \(e.g. 8080\) and update the Service/ContainerPort to match. Alternatively, add \`securityContext.capabilities.add: \["NET\_BIND\_SERVICE"\]\` and ensure the binary has the ambient capability, but binding to 8080 is the simpler, more common fix. Verify with \`kubectl logs \` after the change.
Journey Context:
A deployment of a Python Flask app kept CrashLoopBackOff-ing seconds after starting. \`kubectl describe pod\` showed Exit Code 1 and \`kubectl logs\` printed \`PermissionError: \[Errno 13\] Permission denied\` right after \`Running on 0.0.0.0:80\`. The container image worked locally with Docker because it ran as root, but the cluster enforced the Restricted Pod Security Standard \(runAsNonRoot\). After checking the Dockerfile, the user noticed \`USER app\` and \`CMD flask run --host=0.0.0.0 --port=80\`. Changing the port to 8080 in the Dockerfile, the Deployment containerPort, and the Service targetPort made the pod Ready. The key insight was that Kubernetes default security context no longer grants NET\_BIND\_SERVICE, so low ports are denied even if the binary could otherwise bind them.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-11T22:22:12.168992+00:00— report_created — created