[{"data":1,"prerenderedAt":233},["ShallowReactive",2],{"blog-docker-container-alerts-missing":3},{"id":4,"title":5,"author":6,"body":7,"date":209,"description":210,"draft":211,"extension":212,"image":213,"keywords":214,"meta":222,"modified":209,"navigation":223,"path":224,"seo":225,"stem":226,"tags":227,"__hash__":232},"blog\u002Fblog\u002Fdocker-container-alerts-missing.md","Docker Containers Die Quietly — And Nobody Gets Paged","haile37",{"type":8,"value":9,"toc":200},"minimark",[10,14,33,36,41,53,60,68,120,124,145,148,152,158,162,165,176,179,186,190],[11,12,13],"p",{},"Here's a scenario that plays out in almost every small engineering team I've spoken with:",[15,16,17,21,24,27,30],"ol",{},[18,19,20],"li",{},"A container OOMKills at 2 AM.",[18,22,23],{},"Docker restarts it automatically.",[18,25,26],{},"The service comes back up, slightly degraded.",[18,28,29],{},"Nobody is paged because \"the service is technically running.\"",[18,31,32],{},"Six hours later, a customer reports stale data.",[11,34,35],{},"The restart masked the problem. The alert never fired. And now the team is debugging a ghost.",[37,38,40],"h2",{"id":39},"why-this-happens","Why this happens",[11,42,43,44,48,49,52],{},"Docker and Docker Compose are excellent for ",[45,46,47],"em",{},"running"," containers. They are terrible at ",[45,50,51],{},"telling you when something goes wrong",".",[11,54,55,59],{},[56,57,58],"code",{},"docker events"," exists, but nobody is watching it. Health checks exist, but only catch a container that's fully down — not one that's cycling restarts every five minutes.",[11,61,62,63,67],{},"The gap is ",[64,65,66],"strong",{},"runtime signal without operational visibility",":",[69,70,71,84],"table",{},[72,73,74],"thead",{},[75,76,77,81],"tr",{},[78,79,80],"th",{},"What Docker gives you",[78,82,83],{},"What you actually need",[85,86,87,96,104,112],"tbody",{},[75,88,89,93],{},[90,91,92],"td",{},"Container status (running\u002Fstopped)",[90,94,95],{},"Exit reason + frequency",[75,97,98,101],{},[90,99,100],{},"Restart count",[90,102,103],{},"Alert when restarts exceed threshold",[75,105,106,109],{},[90,107,108],{},"Logs (when you pull them)",[90,110,111],{},"Proactive log streaming to Slack",[75,113,114,117],{},[90,115,116],{},"Health check pass\u002Ffail",[90,118,119],{},"Trend over time",[37,121,123],{"id":122},"who-feels-this-most","Who feels this most",[125,126,127,133,139],"ul",{},[18,128,129,132],{},[64,130,131],{},"Indie hackers and small teams"," running self-hosted apps on a single VPS.",[18,134,135,138],{},[64,136,137],{},"Early-stage startups"," that moved fast and haven't wired up full observability yet.",[18,140,141,144],{},[64,142,143],{},"Freelancers"," managing production servers for clients.",[11,146,147],{},"Datadog and New Relic solve this — for $500+\u002Fmonth and a two-week integration project. That's not a viable option for a $30\u002Fmonth VPS.",[37,149,151],{"id":150},"the-pain-point-in-one-sentence","The pain point in one sentence",[153,154,155],"blockquote",{},[11,156,157],{},"There's no lightweight, affordable way to get alerted when Docker containers crash, cycle, or degrade — without setting up a full observability stack.",[37,159,161],{"id":160},"what-a-lightweight-alert-tool-looks-like","What a lightweight alert tool looks like",[11,163,164],{},"A single binary that:",[125,166,167,170,173],{},[18,168,169],{},"Connects to the Docker socket",[18,171,172],{},"Watches for OOMKills, restarts, and exit codes",[18,174,175],{},"Sends Slack\u002Femail notifications with context (container name, exit code, last 20 log lines)",[11,177,178],{},"No Kubernetes required. No cloud agent. Just install it next to your containers.",[11,180,181,182,185],{},"If you're managing Docker in production on a VPS, start with restart-count thresholds — even a cron job that alerts when ",[56,183,184],{},"docker ps"," shows high restart counts beats complete silence.",[37,187,189],{"id":188},"related-reading","Related reading",[125,191,192],{},[18,193,194,199],{},[195,196,198],"a",{"href":197},"\u002Fblog\u002Femail-deliverability-pain-points","Why Email Deliverability Is Still Broken in 2025"," — another production problem that fails silently",{"title":201,"searchDepth":202,"depth":202,"links":203},"",2,[204,205,206,207,208],{"id":39,"depth":202,"text":40},{"id":122,"depth":202,"text":123},{"id":150,"depth":202,"text":151},{"id":160,"depth":202,"text":161},{"id":188,"depth":202,"text":189},"2025-06-10","OOMKilled, CrashLoopBackOff, exit code 137 — Docker containers fail silently in production. Learn why teams miss alerts and what lightweight monitoring looks like.",false,"md",null,[215,216,217,218,219,220,221],"Docker monitoring","OOMKill","container alerts","CrashLoopBackOff","exit code 137","VPS DevOps","Docker restart loop",{},true,"\u002Fblog\u002Fdocker-container-alerts-missing",{"title":5,"description":210},"blog\u002Fdocker-container-alerts-missing",[228,229,230,231],"docker","devops","monitoring","pain-point","ZnGqX2h9tU12drvYNM1OKaEnw1GQqK2tyZsPjhm_6Pg",1781441628655]