blog.iankulin.com

Docker

ViewTube

ViewTube is a self-hosted YouTube front end that strips out ads and tracking, with local accounts for subscribing to channels and keeping video progress. I got it running in a VM with Docker Compose in about five minutes, along with a workaround of using MongoDB 4.4 because newer versions require AVX CPU support my VM didn’t expose...

Building Docker images for multiple architectures

I look at replacing a shell script that built and pushed separate Docker images for amd64 and arm64 with docker buildx, which produces a single multi-platform image of my mdserver app. My attempt to also target 32-bit ARM for the Raspberry Pi runs extremely slowly because buildx emulates foreign architectures with QEMU, prompting me to consider offloading builds to GitHub Actions...

Docker volume backup is more complicated than it should be

I explain how to back up and migrate a Docker named volume between hosts using the official method: stopping the container, then running a temporary container that mounts the volume and tars its data to a file. I work through an example with Uptime Kuma that covers moving the data to a new VM and restoring it into a fresh install, including a gotcha where restoring to the wrong path leaves the data nested and ignored. I end by questioning why simply copying the volume’s files from the local filesystem isn’t recommended...

Finding the host IP from inside a Docker container

Migrating my node.js API from a homelab VM to a VPS hits a snag: nginx, running in a Docker container, serves static files fine but returns Bad Gateway when proxying API requests. I walk through working out that localhost inside the container doesn’t reach the host, trying host.docker.internal without success, and finding the fix by checking the docker0 bridge interface, which gave 172.17.0.1 as the address to put in the nginx config...

How to recover a docker run command

How I reconstruct a forgotten docker run command when I need to update a container: there’s no Docker command that retrieves it, but shell history and docker inspect can reveal the ports, mounts, and volumes I used. I suggest switching to Docker Compose as the way to avoid the problem in future...

Installing SSL Certificates with Nginx on Docker

I set up SSL for a domain served by Nginx in Docker, using Let’s Encrypt certificates generated through Porkbun. I cover concatenating the certificate files, fixing a malformed PEM that broke Nginx startup, and migrating from a plain docker run command to a docker-compose setup with volume mounts and SSL config. I note that certificates expire after 90 days, with certbot suggested as a future automation fix...

Where Do Docker Container Logs Go?

How I use docker logs to find the error when a container exits immediately after starting with no visible message. My walkthrough uses a Filebrowser container that crashed on startup due to a newline character in its JSON config, a typo introduced by the blog post I followed instead of the official instructions...