docker-allthemods10/README.md
Sulkta ae51ce73c0
Some checks failed
gitleaks / scan (push) Failing after 1s
docs: rewrite README for public release; tidy gitleaks workflow comment
2026-06-28 13:37:41 -07:00

6.1 KiB

docker-allthemods10

A Docker image that runs an All the Mods 10 (ATM10) dedicated Minecraft server on NeoForge.

No Minecraft or modpack files are shipped in the image. On first start the container downloads the pinned ATM10 server files from CurseForge and runs the NeoForge installer; subsequent starts boot the already-installed server. The first run can take a while as the installer completes — watch the logs.

  • Modpack: All the Mods 10, server version 5.5
  • Loader: NeoForge 21.1.219 (Minecraft 1.21.1)
  • Base image: eclipse-temurin:21-jdk

Requirements

  • Docker (or any OCI runtime / Kubernetes — see k8s_example.md)
  • A persistent volume mounted at /data
  • TCP port 25565 published
  • EULA=true — you must accept the Minecraft EULA to run a server

Quick start

# Build the image
docker build -t allthemods10 .

# Run it
docker run -d \
  --name atm10 \
  -p 25565:25565 \
  -v atm10-data:/data \
  -e EULA=true \
  -e MOTD="All the Mods 10 Server" \
  -e MAX_PLAYERS=10 \
  allthemods10

The server installs into the /data volume on first boot. Give it a few minutes and watch docker logs -f atm10 until the world is ready.

Configuration

All configuration is via environment variables. Only EULA is required.

Variable Default Description
EULA false Set to true to accept the Minecraft EULA. The server will not start otherwise.
JVM_OPTS -Xms2048m -Xmx4096m (example) JVM flags. Each space-separated token is appended to user_jvm_args.txt.
MOTD A Minecraft Server Server message of the day.
MAX_PLAYERS 20 Maximum concurrent players.
ALLOW_FLIGHT false true/false — allow flight.
ONLINE_MODE true true/false — authenticate players against Mojang.
ENABLE_WHITELIST false true/false — enforce the whitelist.
WHITELIST_USERS (empty) Comma-separated Minecraft usernames to add to the whitelist.
OP_USERS (empty) Comma-separated Minecraft usernames to grant operator (level 4).
RCON_PASSWORD (empty) If set, enables RCON on the server and uses this password.
RCON_PORT 25575 RCON listen port (only used when RCON_PASSWORD is set).

WHITELIST_USERS and OP_USERS are resolved to UUIDs at startup via playerdb.co and merged into whitelist.json / ops.json idempotently, so the same name is never added twice.

Permissions

The server process runs as uid 99 / gid 100, which matches the default nobody:users ownership on Unraid. On other hosts you may need to chown 99:100 the /data volume (the Kubernetes example does this with an init container).

Resetting / upgrading

If an install is incomplete or you want to force a re-download, delete the Server-Files-<version>.zip file in /data; the next start will re-run the install/upgrade.

Optional: RCON order fulfillment daemon

fulfillment.py is an optional companion daemon that delivers in-game items via RCON in response to confirmed orders from an external shop API (for example, a donation/store integration). It is disabled by default and only starts when all three of these are set:

  • SHOP_API_URL — base URL of the shop API
  • SHOP_API_KEY — API key
  • RCON_PASSWORD — so the daemon can talk to the server over RCON

When enabled it polls the shop API for pending orders, delivers the configured item kits to online players via RCON, and marks orders fulfilled. The item kits (ITEM_COMMANDS) and poll/startup timing are defined at the top of fulfillment.py; edit them to match your own shop and items. Additional variables: RCON_HOST (default 127.0.0.1), FULFILLMENT_POLL_INTERVAL (default 30s), FULFILLMENT_STARTUP_DELAY (default 90s).

If you do not run a shop, you can ignore this file entirely — leave the three variables unset and the server runs normally.

Kubernetes

A community-contributed StatefulSet/Service manifest is in k8s_example.md. It is provided as a starting point and is not an officially supported deployment method.

Continuous integration

  • .github/workflows/docker-hub.yml — builds and pushes the image to Docker Hub on pushes to main/develop (expects DOCKERHUB_USERNAME / DOCKERHUB_TOKEN secrets).
  • .github/workflows/update-mod.yml — a daily job that checks CurseForge for a newer server build and opens an update commit (expects a CURSEFORGE_API_KEY).
  • .forgejo/workflows/gitleaks.yml — runs gitleaks secret scanning (Forgejo/Gitea Actions; safe to delete if unused).

Contributing

Issues and pull requests are welcome. Please keep the image lean — modpack content is downloaded at runtime, not vendored — and avoid committing secrets (a gitleaks workflow guards against this).

License & attribution

This repository contains only the Docker packaging (entrypoint scripts and CI workflows) for the All the Mods 10 server. It ships no Minecraft or modpack files.

It is a fork of W3LFARe/docker-allthemods10, which in turn derives from Goobaroo/docker-allthemods9. The packaging is provided as-is, under the same terms as those upstream projects.

Minecraft, NeoForge, the All the Mods 10 modpack, and the individual mods it bundles are each subject to their own licenses and terms — including the Mojang/Minecraft EULA and the All the Mods team's distribution terms. You are responsible for complying with them when you run this server.