Files
AskKennyB/askkennyb/public/blog/project-log-docker-dreams-and-yaml-nightmares/index.html
2025-11-06 14:46:05 -08:00

7 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Project Log: Docker Dreams and YAML Nightmares | Ask KennyB</title><meta name=keywords content="homelab,docker,networking,humor"><meta name=description content="A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Project Log: Docker Dreams and YAML Nightmares"><meta property="og:description" content="A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience."><meta property="og:locale" content="en-us"><meta property="og:type" content="article"><meta property="article:section" content="posts"><meta property="article:published_time" content="2025-11-05T00:00:00+00:00"><meta property="article:modified_time" content="2025-11-05T00:00:00+00:00"><meta property="article:tag" content="Homelab"><meta property="article:tag" content="Docker"><meta property="article:tag" content="Networking"><meta property="article:tag" content="Humor"><meta name=twitter:card content="summary"><meta name=twitter:title content="Project Log: Docker Dreams and YAML Nightmares"><meta name=twitter:description content="A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"https://askkennyb.com/posts/"},{"@type":"ListItem","position":2,"name":"Project Log: Docker Dreams and YAML Nightmares","item":"https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Project Log: Docker Dreams and YAML Nightmares","name":"Project Log: Docker Dreams and YAML Nightmares","description":"A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.","keywords":["homelab","docker","networking","humor"],"articleBody":" Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.\nIt started innocently enough:\na single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.\nThe Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.\nYAML: 1 — Human: 0.\nThe Fix A humble indent.\nFour spaces, to be precise.\nSuddenly the world made sense again, DNS was stable, and my cat stopped judging me.\nLessons Learned Version control everything, even your test Compose files. Automate backups before you “just try something real quick.” Celebrate small victories—sometimes the win is just getting your network back online before dinner. If you read this and thought, “Ive been there,” then welcome to the club.\nHomelabs teach patience, humility, and the thrill of a perfectly clean docker ps output.\nStay tuned for next weeks adventure: rebuilding my reverse proxy after a 301 loop ate my weekend.\n","wordCount":"203","inLanguage":"en","datePublished":"2025-11-05T00:00:00Z","dateModified":"2025-11-05T00:00:00Z","author":{"@type":"Person","name":"Kenny Bondelie"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/"},"publisher":{"@type":"Organization","name":"Ask KennyB","logo":{"@type":"ImageObject","url":"https://askkennyb.com/favicon.ico"}}}</script></head><body id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/posts/>Posts</a></div><h1 class="post-title entry-hint-parent">Project Log: Docker Dreams and YAML Nightmares</h1><div class=post-description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</div><div class=post-meta><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></div></header><div class=toc><details><summary accesskey=c title="(Alt + C)"><span class=details>Table of Contents</span></summary><div class=inner><ul><li><a href=#the-symptoms aria-label="The Symptoms">The Symptoms</a></li><li><a href=#the-diagnosis aria-label="The Diagnosis">The Diagnosis</a></li><li><a href=#the-fix aria-label="The Fix">The Fix</a></li><li><a href=#lessons-learned aria-label="Lessons Learned">Lessons Learned</a></li></ul></div></details></div><div class=post-content><blockquote><p>Sometimes the difference between a &lsquo;production-ready stack&rsquo; and &lsquo;why is my NAS on fire?&rsquo; is one missing space in a YAML file.</p></blockquote><p>It started innocently enough:<br>a single <code>docker-compose.yml</code>, neat and tidy, humming along like a well-trained orchestra. Then I added <em>one</em> new service—my self-hosted note app—and everything fell apart.</p><h3 id=the-symptoms>The Symptoms<a hidden class=anchor aria-hidden=true href=#the-symptoms>#</a></h3><ul><li>Containers refusing to start with no useful logs</li><li>DNS loops that made my router question its purpose</li><li>My wife asking, “Why is our TV buffering when you touch the server?”</li></ul><h3 id=the-diagnosis>The Diagnosis<a hidden class=anchor aria-hidden=true href=#the-diagnosis>#</a></h3><p>Turns out, I nested a volume mount under the wrong key.<br>YAML: 1 — Human: 0.</p><h3 id=the-fix>The Fix<a hidden class=anchor aria-hidden=true href=#the-fix>#</a></h3><p>A humble indent.<br>Four spaces, to be precise.<br>Suddenly the world made sense again, DNS was stable, and my cat stopped judging me.</p><h3 id=lessons-learned>Lessons Learned<a hidden class=anchor aria-hidden=true href=#lessons-learned>#</a></h3><ol><li><strong>Version control everything</strong>, even your test Compose files.</li><li><strong>Automate backups</strong> before you “just try something real quick.”</li><li><strong>Celebrate small victories</strong>—sometimes the win is just getting your network back online before dinner.</li></ol><hr><p>If you read this and thought, “Ive been there,” then welcome to the club.<br>Homelabs teach patience, humility, and the thrill of a perfectly clean <code>docker ps</code> output.</p><p><em>Stay tuned for next weeks adventure: rebuilding my reverse proxy after a 301 loop ate my weekend.</em></p></div><footer class=post-footer><ul class=post-tags><li><a href=https://askkennyb.com/tags/homelab/>Homelab</a></li><li><a href=https://askkennyb.com/tags/docker/>Docker</a></li><li><a href=https://askkennyb.com/tags/networking/>Networking</a></li><li><a href=https://askkennyb.com/tags/humor/>Humor</a></li></ul><nav class=paginav><a class=next href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/><span class=title>Next »</span><br><span>Hello, World — Why Ask Kenny B?</span></a></nav></footer></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script><script>document.querySelectorAll("pre > code").forEach(e=>{const n=e.parentNode.parentNode,t=document.createElement("button");t.classList.add("copy-code"),t.innerHTML="copy";function s(){t.innerHTML="copied!",setTimeout(()=>{t.innerHTML="copy"},2e3)}t.addEventListener("click",t=>{if("clipboard"in navigator){navigator.clipboard.writeText(e.textContent),s();return}const n=document.createRange();n.selectNodeContents(e);const o=window.getSelection();o.removeAllRanges(),o.addRange(n);try{document.execCommand("copy"),s()}catch{}o.removeRange(n)}),n.classList.contains("highlight")?n.appendChild(t):n.parentNode.firstChild==n||(e.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="TABLE"?e.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(t):e.parentNode.appendChild(t))})</script></body></html>