LunaPixelStudios / Better-MC

https://lunapixel.studio/discord
https://lunapixel.studio/discord
86 stars 15 forks source link

Cannot create Server using docker-compose setup #1758

Closed da-stoaz closed 4 months ago

da-stoaz commented 4 months ago

Describe the Bug

I wanted to set up a Minecraft Server in Docker, but Errors occur in the creation of the container (first start). As a result, the container does not start at all.

Reproduction Steps

  1. I created a docker-compose file which looks like this: `services: minecraft: image: itzg/minecraft-server container_name: MC-BMC # Give the container a name tty: true stdin_open: true ports:
  2. I started it using "docker-compose up -d"
  3. ...

Screenshots and Videos

logs.txt

Crash Report or Log

No response

Operating System

Linux Ubuntu

Minecraft Version

1.20.1

Modloader

Forge

Modpack Version

v28

Other Mods

No additional mods

mjftw commented 4 months ago

I also have this problem. My Minecraft server uses the docker image and this bug means I can't use Better-MC :(

kStor2poche commented 4 months ago

You can adapt it by using the example provided in the itzg github :

services:
  mc:
    image: itzg/minecraft-server:java17
    environment:
      EULA: true
      TYPE: MODRINTH
      VERSION: 1.20.1
      MEMORY: 10G
      MODRINTH_MODPACK: better-mc-forge-bmc4
      MODRINTH_VERSION: v28
      MODRINTH_OVERRIDES_EXCLUSIONS: |
        mods/NekosEnchantedBooks-*.jar
        mods/citresewn-*.jar
      MODS_FILE: /extras/mods.txt
      ENABLE_WHITELIST: false
      MAX_PLAYERS: 5
      ANNOUNCE_PLAYER_ACHIEVEMENTS: "true"
      SPAWN_ANIMALS: "true"
      SPAWN_MONSTERS: "true"
      PVP: "true"
      TZ: "Europa/Paris"
    volumes:
      - data:/data
      - ./mods.txt:/extras/mods.txt:ro
    ports:
      - "25565:25565"

volumes:
  data: {}

Though for me, another problem arises with the client crashing when trying to join the server (while singleplayer works fine) with a log that is too long for prism to handle apparently

For reference, my mods.txt contains this :

https://mediafilez.forgecdn.net/files/5052/580/quark_delight_1.0.0_forge_1.20.1.jar
https://mediafilez.forgecdn.net/files/5029/396/aether_delight_1.0.0_forge_1.20.1.jar
https://mediafilez.forgecdn.net/files/5399/941/mowziesmobs-1.6.5.jar
https://mediafilez.forgecdn.net/files/5468/648/twilightforest-1.20.1-4.3.2508-universal.jar

EDIT : replacing the twilight forest download link with the proper version ( https://mediafilez.forgecdn.net/files/5071/19/twilightforest-1.20.1-4.3.2145-universal.jar ) now only makes the client softlock on the "encrypting" phase sooo that's progress, I guess ??

EDIT 2 : just ended up making a script to download all the required mods with the FileIDs listed in manifest.json through curseforge API requests and running a standard forge docker config, then copying the elements of the "override" directory of the modpack to the data directory. Now it's working. I guess itzg's docker-compose way of pulling mods does some really weird things whether you're using curseforge or modrinth.

For reference, here's the script I made if you ever choose to go that way :

#!/bin/sh

ids=$(jq -r '[.files.[].fileID] | join(", ")' ../manifest.json)

echo $ids

mod_urls=$(curl -X POST https://api.curseforge.com/v1/mods/files -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'x-api-key: [insert your api key here]' -d "{ \"fileIds\": [ ${ids} ] }" | jq -r '.data[].downloadUrl')

for u in $mod_urls;do
#    echo $u
    if [[ $u != "null" ]];then
        wget $u
    else
        echo "somehow some mods are missing, good luck with that !"
    fi
done

The curseforge api returned some modpacks twice, while missing some other ones (I think because of licensing issues on those mods). That meant I had to find the fifteen or so fileIDs it had skipped and search/download them manually. Though not perfect, 15 mods to download manually is way better than 260 :sweat_smile:

Though you could always automate the process for those mods too since the download links have a fix form you could construct from the information given by a get mod file request.

chorbintime commented 4 months ago

itzg's Minecraft docker does NOT use the serverpack files that we dedicate hours of testing and troubleshooting to create and provide for our users. They have instead decided to use the Modrinth version of our modpacks, which does not come with all mods by default due to some mods licenses not allowing redistribution on Modrinth.

When you launch the Modrinth version of the modpack, there is a popup that prompts you to add these mods manually. Because itzg's docker just grabs the Modrinth client files and manually removes clientside mods (which it does not do properly and ends up missing a lot of stuff), you end up with less mods than intended.

Overall, there's really just no reason to use a docker - most people have no use case for it and just one out of habit. If you're going to use a docker, then please, don't use the one by itzg. He absolutely refuses to support serverpack files for some reason which is a move that goes directly against modpack developers.

If you want to host a server properly, please read our extensive guide here.

mjftw commented 4 months ago

Thanks for your replies and information all!

For what it's worth I spent a little longer trying to get the docker server running using the Modrinth config but couldn't get the server to boot.

I've now switched over to a Bisect Hosting server with BMC4 pre-installed and it's working nicely!