<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Docker on Mike Bell - Blog &amp; Stuff</title><link>https://mikebell.io/tags/docker/</link><description>Recent content in Docker on Mike Bell - Blog &amp; Stuff</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>hello@mikebell.io (Mike Bell)</managingEditor><webMaster>hello@mikebell.io (Mike Bell)</webMaster><copyright>© 2026 Mike Bell</copyright><lastBuildDate>Mon, 12 Jan 2026 19:41:38 +0000</lastBuildDate><atom:link href="https://mikebell.io/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Homelab Update January 2026</title><link>https://mikebell.io/posts/homelab-update-january-2026/</link><pubDate>Mon, 12 Jan 2026 19:41:38 +0000</pubDate><author>hello@mikebell.io (Mike Bell)</author><guid>https://mikebell.io/posts/homelab-update-january-2026/</guid><description>
&lt;p>Happy new year homelabbers! I&amp;rsquo;m cheating a bit and rolling some of the work I got done in December 2025 into this update. I want to say my homelab is pretty boring now it just works which is awesome, only minor tinkering is required these days so I&amp;rsquo;ve decided to focus on observability for a bit. Knowing when and what things have gone wrong was sorely missing so I&amp;rsquo;ve finally gotten round to sorting a lot of that out which I&amp;rsquo;ll detail in a section below.&lt;/p>
&lt;h2 class="relative group">Chicken/Egg Docker Woes
&lt;div id="chickenegg-docker-woes" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#chickenegg-docker-woes" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Ever since I migrated away from Ubuntu to Debian I&amp;rsquo;ve been unable to restart the VM and have all the containers come up again. Even after going through every compose file and making sure that &lt;code>restart: unless-stopped&lt;/code> was set. It&amp;rsquo;s been driving me nuts that this has been happening. Well I finally figure out what was wrong. The hint was that the only container to consistently come back up was &lt;code>fluent-bit&lt;/code>. When I migrated to Debian I decided to improve my logging so set up fluent-bit and OpenSearch. I also set the docker logging driver to fluent-bit. Can you spot the issue yet? When docker comes up all the other containers fail over refusing to connect to the fluent-bit socket, pretty obvious now, if docker isn&amp;rsquo;t running the fluent-bit container isn&amp;rsquo;t running so how can docker connect to the fluent-bit container? I could keep this sentence recursive. Eventually the fluent-bit container comes up but the rest of them containers have already stopped, restarting them all brings them up fine. I removed the fluent-bit container and ran it as a systemd unit instead. Docker restarts are perfectly fine now.&lt;/p>
&lt;h2 class="relative group">Uptime Kuma and Gotify
&lt;div id="uptime-kuma-and-gotify" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#uptime-kuma-and-gotify" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>A while ago I did have Uptime Kuma as part of my homelab but removed it since everything was on one physical server so if there was a huge problem UK would never pick it up since it was probably down as well. I&amp;rsquo;m now hosting it on my Media Server which while still a single point of failure it&amp;rsquo;s physically separate from my main homelab. As well as this I setup Gotify to send me notifications when services go down, these go straight to my phone so I can get near realtime downtime notifications. I&amp;rsquo;ve had to tune the thresholds in UK for some of my applications since some are less reliable than others (the ones not on my infra!).&lt;/p>
&lt;h2 class="relative group">Wireguard on Android
&lt;div id="wireguard-on-android" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#wireguard-on-android" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>For about 24 hours I lost all network connectivity on my phone (Pixel 7 Pro). It turns out that wireguard had crashed and completely nuked connectivity. After rebooting my phone it worked again. No idea why this happened but it was pretty annoying. I usually have my home wireguard VPN connected 24/7 even when on my home wifi but because my phone is silent all the time I didn&amp;rsquo;t notice, I guess I didn&amp;rsquo;t need to use my phone at all that day.&lt;/p>
&lt;p>That&amp;rsquo;s it for this update, there&amp;rsquo;s still work in my todo list that I need to get around to but that can wait for a bit.&lt;/p>
&lt;p>Thanks for reading via RSS!&lt;/p>
&lt;p>Send me a message on &lt;a href="https://remotelab.uk/mikebell">Mastodon&lt;/a> or &lt;a href="mailto:hello@mikebell.io">email me&lt;/a>&lt;/p></description></item><item><title>How I build my CV from Markdown</title><link>https://mikebell.io/posts/2025-11-23-how-i-build-my-cv-from-markdown/</link><pubDate>Sun, 23 Nov 2025 11:33:49 +0000</pubDate><author>hello@mikebell.io (Mike Bell)</author><guid>https://mikebell.io/posts/2025-11-23-how-i-build-my-cv-from-markdown/</guid><description>
&lt;p>I&amp;rsquo;ve changed site generators and cms more times than I can remember (my git repo has the entire history of this site!) the one thing I try to keep the same is my CV. It changes roughly every few years with either a new job or update in skills. I want a way that regardless of however my site is built my CV is just there ready to go.&lt;/p>
&lt;h2 class="relative group">Markdown first
&lt;div id="markdown-first" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#markdown-first" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>My CV is a markdown file you can see it &lt;a
href="https://code.remotelab.uk/mikebell/mikebell.io/raw/branch/main/content/cv.md"
target="_blank"
>here&lt;/a>. It doesn&amp;rsquo;t require anything special(ish - I&amp;rsquo;ll get onto that). The idea is that you can put it in any site generator or CMS (that supports markdown) and it&amp;rsquo;ll render &lt;em>something&lt;/em>. I think it&amp;rsquo;s a great approach.&lt;/p>
&lt;h2 class="relative group">Rendering outside the box
&lt;div id="rendering-outside-the-box" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#rendering-outside-the-box" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>The box here being any CMS/Static Site generator. I want it to look decent and not like whatever is rendering it at the time. I decide to use Pandoc, it&amp;rsquo;s as simple as running pandoc extra with the following args:&lt;/p>
&lt;pre tabindex="0">&lt;code>content/cv.md --output=public/cv.pdf --template /.pandoc/templates/eisvogel.latex --syntax-highlighting=idiomatic -V block-headings
&lt;/code>&lt;/pre>&lt;p>I used the docker image extensively to test this out and even managed to contribute some docs back on using templates with docker on Ubuntu (long story!).&lt;/p>
&lt;h2 class="relative group">Pipeline
&lt;div id="pipeline" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#pipeline" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>It&amp;rsquo;s not enough to have a way of turning my CV into a PDF I don&amp;rsquo;t want to ever think about it ever again, dealing with PDFs is a hassle at the best of times so I chucked the entire process into a FrogeJo &lt;a
href="https://code.remotelab.uk/mikebell/mikebell.io/src/branch/main/.forgejo/workflows/main.yml#L34"
target="_blank"
>action&lt;/a> (there&amp;rsquo;s also a spoiler for an upcoming section). This creates my cv which is then uploaded to an S3 bucket. You can see my CV &lt;a
href="https://mikebell.io/cv.pdf"
target="_blank"
>here&lt;/a> freshly built when this blog post goes live.&lt;/p>
&lt;h2 class="relative group">Anonymising my CV
&lt;div id="anonymising-my-cv" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#anonymising-my-cv" aria-label="Anchor">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>I recently applied for a new job and one of their requirements was an anonymised CV so rather than manually edit it I decided to over engineer it because I sure as hell enjoyed that more than writing STAR answers. If you take a look at the raw version of my CV you can see the following:&lt;/p>
&lt;pre tabindex="0">&lt;code>## Senior DevOps Engineer&amp;lt;!--- start --&amp;gt; - Remote &amp;amp; Manchester UK&amp;lt;!--- end --&amp;gt;
&lt;/code>&lt;/pre>&lt;p>The &lt;code>&amp;lt;!--- start ---&amp;gt;&lt;/code> and &lt;code>&amp;lt;!--- end --&amp;gt;&lt;/code> tag don&amp;rsquo;t render in markdown/HTML so by default the content still shows up. I can then &lt;code>sed&lt;/code> them out when I build the anon version of my CV:&lt;/p>
&lt;pre tabindex="0">&lt;code>- name: Setup Anonymous CV
run: cp content/cv.md content/cv-anon.md &amp;amp;&amp;amp; sed -i &amp;#39;s/&amp;lt;!--- start --&amp;gt;...*&amp;lt;!--- end --&amp;gt;//g&amp;#39; content/cv-anon.md
&lt;/code>&lt;/pre>&lt;p>It then uses pandoc again to create a PDF file and the pipeline uploads it.&lt;/p>
&lt;p>So there you have it, that&amp;rsquo;s how I build my CV from a markdown file into both a standard and anonymised PDF file ready for potential employers. Just because I can it&amp;rsquo;s also available rendered through Hugo and Blowfish &lt;a
href="https://mikebell.io/cv/"
target="_blank"
>here&lt;/a>.&lt;/p>
&lt;p>Thanks for reading via RSS!&lt;/p>
&lt;p>Send me a message on &lt;a href="https://remotelab.uk/mikebell">Mastodon&lt;/a> or &lt;a href="mailto:hello@mikebell.io">email me&lt;/a>&lt;/p></description></item><item><title>Adding custom runners to Forgejo</title><link>https://mikebell.io/posts/adding-custom-runners-forgejo/</link><pubDate>Mon, 10 Feb 2025 20:42:52 +0000</pubDate><author>hello@mikebell.io (Mike Bell)</author><guid>https://mikebell.io/posts/adding-custom-runners-forgejo/</guid><description>
&lt;p>This is one of those problems that now that I get it it really shouldn&amp;rsquo;t have been so hard. Like everything with development and homelabbing documentation is key.&lt;/p>
&lt;p>Huge thanks to:&lt;/p>
&lt;ul>
&lt;li>&lt;a
href="https://mastodon.social/@mcrmonkey"
target="_blank"
>https://mastodon.social/@mcrmonkey&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://hachyderm.io/@badnetmask"
target="_blank"
>https://hachyderm.io/@badnetmask&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>without their toots on Mastodon I wouldn&amp;rsquo;t have been able to grok and actually get things working.&lt;/p>
&lt;p>Now that I have my forgejo instance up and running I&amp;rsquo;m in the process of migrating all my github repos to my own git forge. As part of the move I needed to setup forgejos runners so that I can run actions on the many private infrastructure repos I have.&lt;/p>
&lt;p>Setting up the runners is super simple the forgejo documentation is pretty easy to understand and after following &lt;a
href="https://forgejo.org/docs/latest/admin/runner-installation/#oci-image-installation"
target="_blank"
>this&lt;/a>.&lt;/p>
&lt;p>What wasn&amp;rsquo;t clear was how to add in custom images so that I could tailor the runners how I wanted. My ultimate goal here was to have a runner that had the same functionality I was used to with Github runners. It turns out it&amp;rsquo;s really simple, if you follow the OCI installation method then you should have a file called &lt;code>.runner&lt;/code> this lives in the &lt;code>data&lt;/code> directory you defined in your &lt;code>docker-compose.yml&lt;/code>.&lt;/p>
&lt;p>Your runner file has a section called &lt;code>labels&lt;/code> this is where you add the images you want to use. See my example below:&lt;/p>
&lt;pre tabindex="0">&lt;code>{
&amp;#34;WARNING&amp;#34;: &amp;#34;This file is automatically generated by act-runner. Do not edit it manually unless you know what you are doing. Removing this file will cause act runner to re-register as a new runner.&amp;#34;,
&amp;#34;id&amp;#34;: 1,
&amp;#34;uuid&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;name&amp;#34;: &amp;#34;remotelab&amp;#34;,
&amp;#34;token&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;address&amp;#34;: &amp;#34;https://code.remotelab.uk&amp;#34;,
&amp;#34;labels&amp;#34;: [
&amp;#34;docker:docker://node:20-bullseye&amp;#34;,
&amp;#34;ubuntu-act-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest&amp;#34;
]
}
&lt;/code>&lt;/pre>&lt;p>When you restart the runner you should see you have the &lt;code>ubuntu-act-latest&lt;/code> label available for your actions.&lt;/p>
&lt;p>&lt;a
href="https://github.com/catthehacker/docker_images"
target="_blank"
>caththehackers&lt;/a> images are great but they don&amp;rsquo;t have the &lt;code>aws&lt;/code> cli installed which is a hard requirement for me since I manage a lot of AWS infrastructure with terraform 100% via gitops. To fix this I quickly hacked together a docker file to add in the cli tool:&lt;/p>
&lt;pre tabindex="0">&lt;code>FROM ghcr.io/catthehacker/ubuntu:act-latest
RUN curl &amp;#34;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&amp;#34; -o &amp;#34;awscliv2.zip&amp;#34;
RUN unzip awscliv2.zip &amp;amp;&amp;amp; ./aws/install
&lt;/code>&lt;/pre>&lt;p>As a quick and dirty hack I pushed this up manually to forgejo (it fully supports docker images and provides a registry as well!). I can now reference that image inside my &lt;code>.runner&lt;/code> file.&lt;/p>
&lt;p>You can then reference this in your action:&lt;/p>
&lt;pre tabindex="0">&lt;code>jobs:
configure-aws:
runs-on: ubuntu-act-latest
&lt;/code>&lt;/pre>&lt;p>I still have a few things to tidy up:&lt;/p>
&lt;ol>
&lt;li>Automate building my custom image&lt;/li>
&lt;li>Migrate all repos to forgejo&lt;/li>
&lt;li>Migrate to OpenTofu&lt;/li>
&lt;/ol>
&lt;p>Thanks for reading via RSS!&lt;/p>
&lt;p>Send me a message on &lt;a href="https://remotelab.uk/mikebell">Mastodon&lt;/a> or &lt;a href="mailto:hello@mikebell.io">email me&lt;/a>&lt;/p></description></item></channel></rss>