DevOps error reference
Search the error text you have in front of you. Each entry names the causes in the order they are actually responsible, and gives the one command that confirms or rules out each one.
81 errors8 toolsupdated Sept 2026
Kubernetes
17 errorsCrashLoopBackOff
MediumFix CrashLoopBackOff: run kubectl logs --previous and kubectl describe pod, then match the exit code to the cause. Covers OOMKilled, bad config and probes.
payments-api-7d4f-x8k2 0/1 CrashLoopBackOff 6 8m
ImagePullBackOff and ErrImagePull
EasyFix ImagePullBackOff: run kubectl describe pod, then correct the image name or tag, add imagePullSecrets or fix registry access. Covers rate limits and TLS.
payments-api-7d4f-x8k2 0/1 ImagePullBackOff 0 2m
OOMKilled (Exit Code 137)
MediumFix OOMKilled exit code 137: run kubectl describe pod to confirm, then raise the memory limit or fix the leak. Covers JVM and Node heap settings and sizing.
Last State: Terminated
Pod stuck in Pending: 0/N nodes are available
MediumFix a Pod stuck in Pending: run kubectl describe pod and read FailedScheduling. Fix Insufficient cpu, taints, volume conflicts, PVC binding and node selectors.
Warning FailedScheduling default-scheduler
Service has no endpoints
EasyFix a Service with no endpoints: run kubectl get endpointslices, then match the selector to Pod labels and make the Pods Ready. Covers port mismatches.
curl: (7) Failed to connect to payments-api port 80: Connection refused
CreateContainerConfigError
EasyFix CreateContainerConfigError: run kubectl describe pod and read the Events. Usually a missing Secret, ConfigMap, key or ServiceAccount the Pod references.
payments-api-7d4f-x8k2 0/1 CreateContainerConfigError 0 2m
Kubernetes node NotReady
MediumFix a NotReady node: run kubectl describe node, then check disk and memory pressure, the kubelet, container runtime and CNI. Includes journalctl commands.
ip-10-0-1-42 NotReady <none> 14d v1.31.3
PersistentVolumeClaim stuck in Pending
MediumFix a PVC stuck in Pending: run kubectl describe pvc, then add the CSI driver, set a valid StorageClass, fix zone or access mode. Covers WaitForFirstConsumer.
data-pvc Pending gp3 8m
The connection to the server localhost:8080 was refused
EasyFix "connection to the server localhost:8080 was refused": check KUBECONFIG, then kubectl config get-contexts and use-context. Covers no kubeconfig and sudo.
The connection to the server localhost:8080 was refused - did you specify the right host or port?
0/3 nodes are available: node(s) had untolerated taint
MediumFix "0/3 nodes are available: node(s) had untolerated taint": run kubectl describe node, then add a toleration or remove the taint. Covers control-plane nodes.
0/3 nodes are available: 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.
Readiness probe failed: HTTP probe failed with statuscode: 503
MediumFix "Readiness probe failed: HTTP probe failed": curl the endpoint inside the Pod, correct the port and path, then raise initialDelaySeconds or timeoutSeconds.
Readiness probe failed: HTTP probe failed with statuscode: 503
no matches for kind "X" in version "Y"
MediumFix "no matches for kind in version": run kubectl api-resources, then update the removed apiVersion or install the missing CRD first. Covers Helm and CI order.
error: unable to recognize "app.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"
Unable to attach or mount volumes: timed out waiting for the condition
HardFix "Unable to attach or mount volumes": check Multi-Attach on a ReadWriteOnce volume, a zone mismatch or a stale attachment. Covers CSI drivers and limits.
Unable to attach or mount volumes: unmounted volumes=[data], unattached volumes=[data kube-api-access-x7k2q]: timed out waiting for the condition
Evicted: The node was low on resource: ephemeral-storage
MediumFix Pod eviction for ephemeral-storage: set requests and limits, cap emptyDir with sizeLimit, rotate container logs and tune image garbage collection.
Pod ephemeral local storage usage exceeds the total limit of containers 1Gi
Error from server (Forbidden): User cannot list resource
MediumFix "Forbidden: User cannot list resource": confirm with kubectl auth can-i, then add a Role and RoleBinding for the exact verb and apiGroup, not cluster-admin.
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:api" cannot list resource "pods" in API group "" in the namespace "production"
Init:CrashLoopBackOff
MediumFix Init:CrashLoopBackOff: run kubectl logs pod -c init-name, then check the dependency it waits on, migrations that cannot rerun, and volume permissions.
Init:CrashLoopBackOff
context deadline exceeded
HardFix Kubernetes "context deadline exceeded": find which component timed out, then check admission webhooks, API server and etcd, CSI calls, probes and kubectl.
Internal error occurred: failed calling webhook "vpolicy.kb.io": Post "https://webhook-service.default.svc:443/validate?timeout=10s": context deadline exceeded
AWS
13 errorsAWS: is not authorized to perform
MediumFix "is not authorized to perform": run aws sts get-caller-identity, then simulate the action in IAM. Covers SCPs, boundaries, resource policies and AssumeRole.
An error occurred (AccessDenied) when calling the PutObject operation:
An error occurred (AccessDenied) when calling the GetObject operation
MediumFix S3 AccessDenied on GetObject: run aws sts get-caller-identity, then the IAM policy simulator. Covers bucket policy, Block Public Access and ARN mistakes.
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
The security token included in the request is expired
EasyFix ExpiredToken: run aws sts get-caller-identity, then refresh with aws sso login or assume the role again. Covers stale env vars, session length and CI OIDC.
An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired.
ThrottlingException: Rate exceeded
MediumFix ThrottlingException "Rate exceeded": set AWS_RETRY_MODE=adaptive, cut API calls, and request a quota increase. Covers Terraform parallelism and DynamoDB.
An error occurred (ThrottlingException) when calling the DescribeInstances operation (reached max retries: 4): Rate exceeded
CannotPullContainerError: pull image manifest has been retried
MediumFix ECS CannotPullContainerError: add a NAT or VPC endpoints, grant the execution role ECR access, and check the image tag. Covers Fargate and secrets errors.
CannotPullContainerError: pull image manifest has been retried 5 time(s): failed to resolve ref "123456789012.dkr.ecr.eu-west-1.amazonaws.com/api:1.4.2": failed to do request: Head "https://...": dial tcp 10.0.2.15:443: i/o timeout
502 Bad Gateway from an Application Load Balancer
HardFix ALB 502 Bad Gateway: turn on access logs, then raise the target's keep-alive above the ALB idle timeout. Also covers health checks and security groups.
elb_status_code=502 target_status_code=- error_reason=-
Task timed out after N seconds
MediumFix Lambda "Task timed out": read the REPORT line, raise memory and timeout, and check VPC NAT access. Covers cold starts and in-function client timeouts.
{"errorMessage":"2026-09-21T09:14:02.123Z abc-123 Task timed out after 30.05 seconds"}
not authorized to perform: iam:PassRole
MediumFix iam:PassRole denied: add iam:PassRole on the exact role ARN with an iam:PassedToService condition. Covers EC2 instance profiles and ECS task roles.
An error occurred (AccessDenied) when calling the RunInstances operation: User: arn:aws:iam::123456789012:user/dev is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789012:role/app-instance-role
InsufficientInstanceCapacity: We currently do not have sufficient capacity
MediumFix InsufficientInstanceCapacity: retry in another availability zone, switch instance type, or accept a range of types. Covers Spot and Capacity Reservations.
An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation: We currently do not have sufficient m5.large capacity in the Availability Zone you requested (eu-west-1a). Our system will be working on provisioning additional capacity.
error: You must be logged in to the server (Unauthorized) on EKS
HardFix EKS "You must be logged in to the server (Unauthorized)": run aws sts get-caller-identity, then add an access entry or aws-auth mapping. Covers lockouts.
error: You must be logged in to the server (Unauthorized)
EKS nodes not joining the cluster
HardFix EKS nodes not joining: attach the node IAM policies, open the API server path, check security groups and subnet tags, then read the instance bootstrap logs.
NodeCreationFailure: Instances failed to join the kubernetes cluster
unable to place a task because no container instance met all of its requirements
MediumFix ECS "unable to place a task": read the closest-match reason, free the host port, add memory or CPU, or use a capacity provider. Covers ENI limits in awsvpc.
service api was unable to place a task because no container instance met all of its requirements. The closest matching container-instance 8f2a1c has insufficient memory available.
SignatureDoesNotMatch: The request signature we calculated does not match
MediumFix S3 SignatureDoesNotMatch: sync the system clock, strip whitespace from the secret key, and set the right region. Also covers proxies and presigned URLs.
An error occurred (SignatureDoesNotMatch) when calling the ListObjectsV2 operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.
Docker
11 errorsCannot connect to the Docker daemon
EasyFix "Cannot connect to the Docker daemon": run sudo systemctl start docker and sudo usermod -aG docker $USER. Covers contexts, Docker Desktop, WSL and CI.
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Docker: no space left on device
EasyFix Docker "no space left on device": run docker system df, then docker system prune and docker builder prune. Covers container logs, volumes and Desktop.
ERROR: failed to solve: failed to register layer:
exec format error
MediumFix "exec format error": check the image with docker inspect, then run docker buildx build --platform linux/amd64. Covers multi-arch images and CI.
standard_init_linux.go:228: exec user process caused: exec format error
docker: port is already allocated
EasyFix "port is already allocated": run docker ps and lsof -i :PORT to find the owner, then stop it or change the host port. Covers Compose and localhost binds.
docker: Error response from daemon: driver failed programming external
toomanyrequests: You have reached your pull rate limit
MediumFix Docker Hub "toomanyrequests: You have reached your pull rate limit": run docker login, or pull via an ECR pull-through cache or a registry mirror.
Error response from daemon: toomanyrequests: You have reached your pull rate
pull access denied, repository does not exist or may require authorization
EasyFix "pull access denied, repository does not exist": check the image name, then docker login to the right registry. Covers token scopes, Actions and Kubernetes.
Error response from daemon: pull access denied for myapp, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
OCI runtime create failed: executable file not found in $PATH
EasyFix "executable file not found in $PATH": run docker run --rm -it --entrypoint sh image, then fix the COPY path, exec-form CMD or missing shell.
OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "myapp": executable file not found in $PATH: unknown
Conflict. The container name is already in use by container
EasyFix "container name is already in use": run docker ps -a, then docker rm or docker rename the old container. Covers docker run --rm and Compose in CI.
docker: Error response from daemon: Conflict. The container name "/postgres" is already in use by container "3f2c1a9e4b7d". You have to remove (or rename) that container to be able to reuse that name.
failed to solve: process "/bin/sh -c ..." did not complete successfully: exit code: 1
EasyFix "failed to solve: process did not complete successfully: exit code 1": rebuild with --progress=plain and debug the failing RUN layer interactively.
ERROR: failed to solve: process "/bin/sh -c npm ci" did not complete successfully: exit code: 1
docker-credential-desktop not installed or not available in PATH
EasyFix "docker-credential-desktop not installed": remove credsStore from ~/.docker/config.json or install a helper. Covers CI and the Kubernetes variant.
error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
Connection refused between Compose services on startup
MediumFix Compose "connection refused" at startup: add a healthcheck and depends_on with condition: service_healthy. Also covers migration gates and app retries.
dial tcp 172.18.0.3:5432: connect: connection refused
Terraform
10 errorsTerraform. Error acquiring the state lock
MediumFix "Error acquiring the state lock": read the lock info, wait if a run is live, otherwise run terraform force-unlock LOCK_ID. Covers S3 and DynamoDB backends.
Error: Error acquiring the state lock
Error: Invalid for_each argument
HardFix "Invalid for_each argument": build the map keys from known inputs instead of values only known after apply. Covers data sources, modules and -target.
Error: Invalid for_each argument
Error: Inconsistent dependency lock file
MediumFix "Inconsistent dependency lock file": run terraform init, or terraform providers lock for every platform. In CI, use -lockfile=readonly instead of -upgrade.
Error: Inconsistent dependency lock file
Error: Provider configuration not present
HardFix "Provider configuration not present": restore the provider block and run terraform destroy, or use terraform state rm. Covers aliased providers in modules.
Error: Provider configuration not present
Error: Cycle: resources depend on each other
HardFix Terraform "Error: Cycle": run terraform graph to see it, then break the loop with separate security group rules, remove depends_on, or split modules.
Error: Cycle: aws_security_group.app, aws_security_group.db
Error: resource already exists
MediumFix Terraform "resource already exists": run terraform import to adopt the object, or rename yours. Always plan after importing. Covers state drift.
Error: creating S3 Bucket (acme-assets): BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it
Error: Saved plan is stale
MediumFix Terraform "Saved plan is stale": run terraform plan -out again, then apply that fresh plan. Use state locking so state cannot move between plan and apply.
Error: Saved plan is stale
Error: Backend configuration changed
MediumFix Terraform "Backend configuration changed": run terraform init -migrate-state to move state, or init -reconfigure to discard the old setup. Safe CI defaults.
Error: Backend configuration changed
Error: Invalid count argument
HardFix "Invalid count argument": derive count from input variables, not resources created in the same run. Or switch to for_each, or apply with -target first.
Error: Invalid count argument
Error: Unsupported argument / An argument named X is not expected here
EasyFix Terraform "Unsupported argument": check the provider docs for your version, convert arguments to blocks, rename module inputs. Then run terraform validate.
Error: Unsupported argument
Git
9 errorsgit: Permission denied (publickey)
EasyFix "Permission denied (publickey)": run ssh -vT git@github.com, ssh-add your key, chmod 600 it, and add the public key to your account. Covers multiple keys.
git@github.com: Permission denied (publickey).
git push rejected, non-fast-forward
EasyFix "rejected non-fast-forward": run git pull --rebase then git push. Use --force-with-lease only to overwrite on purpose, and recover lost commits via reflog.
! [rejected] main -> main (non-fast-forward)
fatal: refusing to merge unrelated histories
EasyFix "refusing to merge unrelated histories": confirm with git log, then git pull --allow-unrelated-histories or rebase. Explains what the flag does.
fatal: refusing to merge unrelated histories
error: Your local changes to the following files would be overwritten by merge
EasyFix "Your local changes would be overwritten by merge": run git stash, pull, then git stash pop. Or commit first, or discard with git restore. Pick by intent.
error: Your local changes to the following files would be overwritten by merge:
fatal: Authentication failed for 'https://github.com/'
EasyFix Git "Authentication failed" on GitHub: use a personal access token instead of a password, clear the stale keychain entry, or switch the remote to SSH.
fatal: Authentication failed for 'https://github.com/acme/myapp.git/'
fatal: not a git repository (or any of the parent directories): .git
EasyFix "fatal: not a git repository" fast: check pwd, run git rev-parse --show-toplevel, then git init or re-clone. Covers safe.directory, submodules and Docker.
fatal: not a git repository (or any of the parent directories): .git
CONFLICT (content): Merge conflict in file
MediumFix a Git merge conflict: run git status, edit the conflict markers, git add the file, then git commit. Use git merge --abort to start over, or checkout --ours.
Automatic merge failed; fix conflicts and then commit the result.
error: src refspec main does not match any
EasyFix "src refspec main does not match any": make a first commit, or rename master with git branch -M main, then git push -u origin main. Covers typos and CI.
error: src refspec main does not match any
You are in 'detached HEAD' state
EasyFix detached HEAD: run git switch -c new-branch to keep your commits, or git switch main to leave. Covers recovering via reflog and why CI is detached.
Warning: you are leaving 1 commit behind, not connected to any of your branches
CI/CD
8 errorsThis job is stuck because you don't have any active runners
MediumFix GitLab "job is stuck, no active runners": match job tags to the runner, allow protected branches, and check the runner is online. Covers shared runners.
This job is stuck because you don't have any active runners online or available with any of these tags assigned to them: docker
fatal: could not read Username for 'https://gitlab.com': No such device or address
MediumFix "could not read Username for gitlab.com" in CI: set git config insteadOf with CI_JOB_TOKEN, allow the job token, or use a deploy key over SSH.
fatal: could not read Username for 'https://gitlab.com': No such device or address
Error: Resource not accessible by integration
MediumFix "Resource not accessible by integration": add the missing scope to the permissions block, such as contents: write or pull-requests: write. Covers forks.
RequestError [HttpError]: Resource not accessible by integration
Not authorized to perform sts:AssumeRoleWithWebIdentity
HardFix "Not authorized to perform sts:AssumeRoleWithWebIdentity": add id-token: write, print the OIDC claims, and match the trust policy sub and aud exactly.
Error: Could not assume role with OIDC: Not authorized to perform sts:AssumeRoleWithWebIdentity
No space left on device on a CI runner
MediumFix "No space left on device" on a CI runner: remove unused toolchains, run docker system prune, and trim caches. Covers self-hosted runners and larger runners.
failed to register layer: write /usr/lib/...: no space left on device
GitHub Actions workflow not triggering
MediumFix a GitHub Actions workflow that will not trigger: validate the YAML, check branch and path filters and the default branch. Covers GITHUB_TOKEN and cron.
(no error: the workflow simply does not appear in the Actions tab)
Cannot connect to the Docker daemon in a CI job
MediumFix "Cannot connect to the Docker daemon" in CI: add a docker:dind service with DOCKER_HOST, bind the socket, or build with Kaniko or Buildah instead.
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Unable to download artifact: Artifact not found
EasyFix "Unable to download artifact: Artifact not found": match the upload and download names, order jobs with needs, and handle the v4 changes. Covers expiry.
Error: Unable to download artifact(s): Artifact not found for name: build-output
Linux
8 errorsToo many open files
MediumFix "Too many open files": check the limit in /proc/PID/limits, find the leak with lsof, then raise LimitNOFILE in systemd. Covers Docker and Kubernetes.
OSError: [Errno 24] Too many open files
bind: address already in use
EasyFix "bind: address already in use": run ss -ltnp or lsof -i :PORT to find the listener, then stop it. For TIME_WAIT, set SO_REUSEADDR. Covers IPv6 overlap.
bind: address already in use
No space left on device but df shows free space
MediumFix "No space left on device" with free space: run df -i for inodes and lsof +L1 for deleted open files. Covers wrong filesystems and finding the space with du.
cp: cannot create regular file '/var/log/app.log': No space left on device
Read-only file system
HardFix "Read-only file system": run mount | grep ' ro', check dmesg for I/O errors, then mount -o remount,rw. Covers fsck, containers and cloud volumes.
touch: cannot touch '/var/log/app.log': Read-only file system
fork: Cannot allocate memory
HardFix "fork: Cannot allocate memory": run free -m, count threads, then check cgroup limits, ulimit -u and vm.overcommit_memory. Often not real memory exhaustion.
bash: fork: Cannot allocate memory
sudo: unable to resolve host
EasyFix "sudo: unable to resolve host": add your hostname to /etc/hosts as 127.0.1.1 myserver, or set it with hostnamectl. Covers containers and cloud images.
sudo: unable to resolve host myserver: Name or service not known
Could not get lock /var/lib/dpkg/lock-frontend
EasyFix "Could not get lock dpkg/lock-frontend": run ps aux | grep apt, wait for unattended-upgrades, then dpkg --configure -a. Do not delete the lock file.
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Temporary failure in name resolution
MediumFix "Temporary failure in name resolution": check /etc/resolv.conf, test with dig @8.8.8.8, and restart systemd-resolved. Covers containers and search domains.
socket.gaierror: [Errno -3] Temporary failure in name resolution
Helm
5 errorsHelm: UPGRADE FAILED and releases stuck pending
MediumFix Helm UPGRADE FAILED: run helm status and helm history, then helm rollback the pending release. Covers immutable fields, CRDs and using --atomic.
Error: UPGRADE FAILED: another operation (install/upgrade/rollback)
Error: INSTALLATION FAILED: cannot re-use a name that is still in use
EasyFix Helm "cannot re-use a name": run helm list -A --all, then use helm upgrade --install, or helm uninstall the failed release. Covers other namespaces.
Error: INSTALLATION FAILED: cannot re-use a name that is still in use
Error: rendered manifests contain a resource that already exists
MediumFix Helm "rendered manifests contain a resource that already exists": add Helm ownership labels and annotations to adopt it, or delete it. Covers CRDs.
Error: INSTALLATION FAILED: Unable to continue with install: ConfigMap "app-config" in namespace "production" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"
Error: another operation (install/upgrade/rollback) is in progress
MediumFix Helm "another operation is in progress": run helm history, then helm rollback to the last good revision. Last resort: delete the pending release Secret.
Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress
Error: nil pointer evaluating interface {} in a Helm template
MediumFix Helm "nil pointer evaluating interface {}": run helm template --debug, then add default, required or an if guard for the missing value. Add a values schema.
Error: INSTALLATION FAILED: template: api/templates/deployment.yaml:23:24: executing "api/templates/deployment.yaml" at <.Values.image.tag>: nil pointer evaluating interface {}.tag