Skip to main content
  1. Posts/

Minecraft Server on Docker ⛏ 🐳

·834 words·4 mins·
Games Docker
ahmza
Author
ahmza
Table of Contents

Introduction
#

Minecraft is a great game and better with friends. A dedicated server allows you to do that1.

A Minecraft server does not require a ton of resources to run, but from my experience the more resources you can throw at it the better when you start to introduce mods and more players.

I run our server on my main PC. This allows me to leverage the system resources in my PC 🦾 leaving the Pi Cluster system resources to handle the rest of the stuff in my lab.

Prerequisites
#

  • Docker
  • Docker Compose

Requirements2
#

Minimum (1-5 Players)
#

  • Intel Pentium 4 or AMD Athlon based CPU
  • 512 MB RAM
  • 2 GB Storage space

Recommended (10-15 Players)#

  • Intel Core or AMD K8 based CPU
  • 3 GB RAM
  • 16 GB Storage Space

Optimal (20+ Players)
#

  • Intel i5/i7 or AMD Ryzen 5/7 Based CPU
  • 6 GB RAM
  • 35 GB Storage Space

Building the Container
#

  1. Create a directory in which you will keep the Minecraft server files
# Make the folder
mkdir minecraft-server
# Ender the folder
cd minecraft-server
  1. Create an environment file to be used by the Docker Container
    • The .env file allows us to specify variables used in the build process.
# Create a .env file
touch .env
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB)
SERVER_JAR=minecraft_server.<version>.jar # change the version
  1. Create the docker-compose.yml file
    • The docker-compose.yml file specifies the container that we want to build 3
# Create the file
touch docker-compose.yml`
# Open in a text editor
vim docker-compose.yml
version: "3"

services:
  minecraft-server:
    build:
      context: .
      args:
        SERVER_MEM: ${SERVER_MEM}
        SERVER_JAR: ${SERVER_JAR}
    volumes:
      - .server-data:/server
    ports:
      - 25565:25565
      - 25575:25575
    container_name: ${CONTAINER_NAME}
    restart: unless-stopped

volumes:
  server-data:
  1. Create the Dockerfile file

    • The Dockerfile builds the container image.
# Create the file
touch Dockerfile`
# Open the file in a text editor
vim Dockerfile
FROM eclipse-temurin:17-jre

ARG SERVER_MEM
ARG SERVER_JAR

ENV SERVER_MEM=${SERVER_MEM}
ENV SERVER_JAR=${SERVER_JAR}

WORKDIR /server

CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui

Setup the Server files
#

We’re almost there, just a few steps left !!

The curious among you may have realised when trying to start the container that it fails with the error below:

Minecraft Server is starting

Error: Unable to access jarfile server.jar

This is because we have not downloaded the server jar file yet, that is our next step.

  1. Navigate to one of the following sites:4
  2. Create a folder in the Minecraft-server folder called .server-data
mkdir .server-data
cd .server-data
  1. Download the jar file - This will depend on the option above so read the instructions
  2. Go back to the root minecraft-server folder
cd ..
  1. Run the container This will create our eula.txt as well as other files needed.
docker compose up # use CTRL+C to exit
minecraft-server  | Starting net.minecraft.server.Main
minecraft-server  | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
minecraft-server exited with code 0
  1. Accept the EULA
# enter the .server-data folder
cd .server-data
# edit eula.txt in a text editor
vim eula.txt
# change `eula=false` to `eula=true`
eula=true
  1. While in the .server-data folder make any changes you want

    • Notable files:
      • server.properties - properties like server name, game mode, world type etc…
      • ops.json - list of server operators (easier to set ingame)
      • whitelist.json - list of players allowed to join the server everyone else rejected access.
  2. Run the container

# -d flag allows the container to run in detached mode i.e in the background
docker compose up -d
# monitor the logs as the server starts. CTRL+C to exit
docker logs minecraft-server --follow
# If you see the bottom line then your server is up and running
     [18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms
     [18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help"

Conclusion
#

Well done you have setup a Minecraft server, now go play !!

There is a lot of cool stuff you can do from this point, for example installing mods or creating scripts to manage the server.


  1. Hosting your own dedicated server allows you to modify every aspect of the server as you see fit. I.E you can modify the server-properties, you can implement a whitelist not to mention being able to add any mods you want ↩︎

  2. Requirements Gathered from here https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29  ↩︎

  3. Yaml is very picky 😞 when it comes to formatting so if you encounter any errors double check your formatting !! ↩︎

  4. I have left Forge out as it is a more involved process plus Fabric is better 😜 ↩︎

  5. Right click the green link that says something like minecraft_server.x.xx.x.jar and copy the link address

    curl -o server.jar \<link you copied here\> ↩︎

  6. Select the Minecraft version, Fabric Loader Version and the Installer Version of your choice. I tend to go with the latest.

    Copy the curl command under CLI download ↩︎