New GitHub Repo: A Self-Updating Docker Image for Minecraft Bedrock Servers
TL;DR: A self-updating Docker image for a Minecraft Bedrock dedicated server—drop a .mcworld file in a mods folder and it’s live on boot.
Why I Built This
One of my kids loves Minecraft and, like every kid with a favorite streamer, wants whatever custom world or mod they just saw played—for about thirty minutes, until the next video changes their mind. They play on console, not PC, so anything beyond vanilla needs a server hosting it for them.
Manually re-provisioning a server every time the flavor of the week changes wasn’t sustainable, especially over summer break. I’d already gone down the PowerShell route to script Bedrock server setup, but this time I wanted something even lighter: a vanilla, always-current Bedrock server image where “installing a mod” means dropping a file in a folder and restarting the container.
What It Does
- Builds a Bedrock Dedicated Server image on Arch Linux, running as a non-root user.
- Fetches the latest official Bedrock server binary at build time—rebuild the image and you’re on the newest version, no manual URL or version bumping.
- On container boot, scans a mounted
modsfolder and installs whatever it finds:.mcworldfiles get extracted and set as the active world, withlevel-nameinserver.propertiesupdated automatically. - Everything lands where the
bedrock_serverbinary expects it (worlds/,behavior_packs/,resource_packs/), so there’s no extra wiring after install. .mcpack/.mcaddon(resource pack / behavior pack) installation is planned but not wired up yet.
Quick Start
Pull the published image from Docker Hub:
docker pull fingerhutascode/minecraft-bedrock-server
Drop the .mcworld file you want loaded into a local folder (e.g. ./mods/), then wire it up in docker-compose.yml:
services:
bedrock:
image: fingerhutascode/minecraft-bedrock-server:latest
container_name: minecraft-bedrock-server
restart: unless-stopped
ports:
- "19132:19132/udp"
volumes:
- ./mods:/home/minecraft/mods:ro
docker compose up -d
To switch worlds, swap the file in mods/ and restart the container. Worth noting: the world is reinstalled fresh from the .mcworld file on every boot, so in-game progress isn’t preserved across restarts. That’s intentional for the “swap worlds on a whim” use case my kids need, not a bug I haven’t gotten to yet.
What’s Next
Wiring up .mcpack / .mcaddon installation so resource and behavior packs can drop into the same mods folder as worlds.
👉 You can check out the repo here: mcbe-server-docker