Modded Minecraft in Docker

edit ✏️

In my adventure to put more homelab in docker, I moved our modded minecraft setup to docker.

Getting Mods

So far I have found all of our mods from curse forge . modpacks make getting multiple mods working together much easier, someone else has already vetted a pack of often times 100+ mods that all play well together. I have yet to get these working in docker, I will, but for not I just have individual mods.

download file

under the hood docker is using wget to get the mod. The link you click on from curseforge will block wget. What I do is pop open the devtools (f12 in chrome), click on the network tab, click the download link on the web page, and watch the real link show up.

minecraft mod in netwrok tab

Docker-compose

I am using docker compose, it makes the command much easier to start, and all the things needed stored in a file. I am not using compose to run multiple things, just for the simple start command.

Create a directory for your server and add the following to a docker-compose.yml file.

version: "3.8"

services:
  mc:
    container_name: walkercraft
    image: itzg/minecraft-server
    ports:
      - 25565:25565
    environment:
      EULA: "TRUE"
      TYPE: "FORGE"
      VERSION: 1.16.5
      MODS_FILE: /extras/mods.txt
      REMOVE_OLD_MODS: "true"
    tty: true
    stdin_open: true
    restart: unless-stopped
    ports:
      - 25565:25565
    volumes:
      - ./minecraft-data:/data
      - ./mods.txt:/extras/mods.txt:ro

volumes:
  data:

mods.txt

Once you have your mod file link from the network tab add them to a mods.txt file next to your docker-compose file.

https://media.forgecdn.net/files/3620/189/engineersdecor-1.16.5-1.1.16.jar

start your server

Once you have made it this far starting the server is pretty simple.

docker compose up -d

kill your server

If your still in the same directory, taking down the server should be pretty easy as well.

docker compose down

# if that does not work you can kill it
docker ps
# copy the id of your container
docker kill <id>