Compose, Kubernetes, and cron checker
Check docker-compose.yml and Kubernetes manifests for mistakes that break deployments — unknown keys, bad references, port clashes, selector mismatches, removed API versions, invalid quantities — and convert crontabs to systemd timers.
Added · updated 28 October 2026
Works with
- Compose visualiser Containers and Kubernetesopens its converted Kubernetes manifests here
- Kubernetes manifest builder and explainer Containers and Kubernetesopens its generated manifests here
- Helm and Kustomize renderer Containers and Kubernetesopens a rendered chart or overlay here (Secret values removed)
How to use it
Paste YAML (or open a file); findings appear as you type, with the line each refers to. Errors will stop the deployment; warnings are likely mistakes; tips (hidden until ticked) are reliability and security suggestions.
-
Docker Compose — top-level and service keys against the Compose Specification, with "did you mean" suggestions for typos (
depend_on,enviroment); every service has an image or build;depends_onnames real services,service_healthyonly waits on services with a healthcheck, and there are no cycles (the start order is shown); named volumes, networks, secrets, and configs are declared; host ports don’t clash; port and duration syntax; restart policies. It also flags:latestand untagged images, fixedcontainer_namewith replicas, databases published on all interfaces, secrets written intoenvironment, unquoted YAML booleans likeDEBUG: true, the YAML 1.1 base-60 trap in short port strings, the Docker socket mounted into a container, andprivileged. -
Kubernetes — several documents separated by
---. Required fields; names in the right DNS format; label values; API versions removed from Kubernetes (for exampleextensions/v1beta1Ingress) and the current one to use; workload selectors that don’t match the pod template labels (the API server rejects these); container images, resource quantities (256MBis invalid — use256Mi), requests above limits, env values that must be strings, volume mounts without volumes; Services whose selector matches no workload or whose targetPort isn’t a container port; IngresspathTypeand backends; ConfigMap and Secret references. Tips cover requests and limits, probes,runAsNonRoot, and privilege escalation. -
cron → systemd — paste
crontab -l(or an/etc/cron.dfile with a user column) and get a.serviceand.timerfor each job with install commands. Schedules becomeOnCalendar=expressions (/15 * * * *→-- *:00/15:00,1-5→Mon..Fri);@rebootbecomesOnBootSec=;VAR=valuelines becomeEnvironment=; shell syntax is wrapped in/bin/sh -c;%is escaped. It warns where meanings differ: cron runs when the day of month or the weekday matches but systemd needs both (so such jobs get twoOnCalendar=lines), cron’s%means newline, andMAILTOhas no equivalent. Check schedules withsystemd-analyze calendar '…'.
These checks catch common mistakes; they are not a full schema validation. For Kubernetes,
kubectl apply --dry-run=server against your cluster is the final word. YAML is parsed in the
browser with js-yaml.
Sharing
Share link copies a URL that opens this tool exactly as you have it. Hand-written links work too: Docker Compose ?compose=…, Kubernetes ?k8s=…, cron → systemd ?crontab=…&system=1&user=1&persistent=0&delay=60. For example ?crontab=0%203%20*%20*%20*%20%2Fusr%2Flocal%2Fbin%2Fbackup#cron.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.