Running a big Minecraft modpack (ATM10) in Crafty Controller with Docker
I manage my Minecraft servers with Crafty Controller 4, a web panel running in Docker. Vanilla and Paper servers are a few clicks. A heavy modpack like All The Mods 10 took some workarounds.
Problem 1: no “import from folder”
Modpack server files come as a big zip you unpack on the server. Crafty’s web UI can only import by uploading a zip from your browser, which is slow for several gigabytes, and it can’t import a folder that’s already on the server.
Workaround: placeholder and swap.
- In Crafty, create a normal placeholder server (any version), with the name and port you want.
- Start it once, then stop it.
- On the host, find its folder:
crafty/servers/<server-uuid>/. - Replace the contents with the unpacked modpack server files, but keep
crafty_managed.txt. That’s how Crafty recognises the folder. - Make sure the files are owned by the same user as the other server folders, or Crafty can’t write to them.
Problem 2: the wrong Java version
Inside the Crafty container, plain java was Java 25. Minecraft 1.21.1 with NeoForge wants Java 21. The container ships several JDKs, so point to 21 explicitly.
In the server’s Config → Server Execution Command:
/usr/lib/jvm/java-21-openjdk-amd64/bin/java @user_jvm_args.txt @libraries/net/neoforged/neoforge/<version>/unix_args.txt nogui
Replace <version> with the NeoForge version in your pack’s libraries folder. Then click Save, which is easy to miss.
Problem 3: memory settings that don’t apply
Crafty has min/max memory fields, but with a NeoForge command like the one above, the real memory flags come from user_jvm_args.txt in the server folder:
-Xms4G
-Xmx12G
Edit that file. Crafty’s fields don’t touch it. ATM10 is hungry: 8 GB is a sensible minimum, and 10–12 GB is comfortable with a few players.
Ports
Each server needs its own port. I publish a range from the Crafty container:
ports:
- "8443:8443" # Crafty web UI
- "25560-25580:25560-25580" # Minecraft servers
and give each server a free port in that range. Remember, a port only reaches friends outside your network if you forward it or use a VPN like Tailscale. I prefer the VPN.
Backups
Modpack worlds are precious and the servers are big. My nightly backup script archives each server folder but skips libraries, cache, logs and crash-reports, which can all be re-downloaded or are useless. That keeps the archives a fraction of the full size.
Troubleshooting checklist
- Server won’t start, log mentions Java class versions → wrong Java. Check the path in the execution command.
- Crafty shows the server but can’t edit files → ownership. The swapped-in files must belong to the same user as Crafty’s other server folders.
- Crafty “forgot” the server →
crafty_managed.txtwas deleted during the swap. Put it back from the placeholder. - Out of memory crashes after an hour → raise
-Xmxinuser_jvm_args.txt, and keep an eye on the host’s free RAM so the OS isn’t starved. - Friends time out while connecting → modpacks take minutes to start. Wait for “Done” in the console before joining, and make sure everyone runs the same modpack version.