Docker Minecraft Purpur Geyser Server

Minecraft Geyser + Floodgate Purpur Minecraft Server
Minecraft Geyser + Floodgate Purpur Minecraft Server

This is a new Docker container to automatically set up and run a Minecraft server that both Java and Bedrock players can connect to! This allows everyone to play on your server no matter which edition of Minecraft you are using. This is the Purpur version. It uses the Geyser and Floodgate plugins to accomplish this.

Since it uses the Purpur Minecraft server it also supports any additional plugins that are compatible with Purpur / Paper / Spigot. This gives you the ability to do many things that are currently impossible to do in Bedrock if you are hosting the official Bedrock dedicated server.

It is fully compatible with my Paper Minecraft Java Server Container (as well as the Geyser + Floodgate version) and you can swap between these containers without changing any configuration.

The official GitHub page is located here.

The Docker Hub page for the container is located here.

It’s now possible to convert your worlds between Bedrock and Java versions. Check out my guide on Chunker here for more information.

Features

  • Sets up fully operational Minecraft server that allows both Java and Bedrock clients to connect
  • Runs the highly efficient “Purpur” Minecraft server
  • Runs Geyser to allow Bedrock clients to connect and Floodgate to allow them to authenticate with their Bedrock credentials to a Java server
  • Plugin support for Purpur / Paper / Spigot / Bukkit
  • Uses named Docker volume for safe and easy to access storage of server data files (which enables more advanced Docker features such as automatic volume backups)
  • Installs and configures OpenJDK 18
  • Automatic backups to minecraft/backups when server restarts
  • Full logging available in minecraft/logs folder
  • Updates automatically to the latest version when server is started
  • Runs on all Docker platforms including Raspberry Pi

Usage

First you must create a named Docker volume. This can be done with:

docker volume create yourvolumename

Now you may launch the server and open the ports necessary with one of the following Docker launch commands.

With default ports:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

With custom ports:

docker run -it -v yourvolumename:/minecraft -p 12345:12345 -e Port=12345 -p 54321:54321/udp -p 54321:54321 -e BedrockPort=54321 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

With a custom Minecraft version (add -e Version=1.X.X, must be present on Purpur’s API servers to work):

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e Version=1.17.1 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

With a maximum memory limit in megabytes (optional, prevents crashes on platforms with limited memory, -e MaxMemory=2048):

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e MaxMemory=2048 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

Using a custom timezone:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e TZ="America/Denver" --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser

Skipping backups on a certain folder:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e NoBackup="plugins" --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

Skipping permissions check:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e NoPermCheck="Y" --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

Configuration / Accessing Server Files

The server data is stored where Docker stores your volumes. This is typically a folder on the host OS that is shared and mounted with the container. I’ll give the usual locations here but if you’re having trouble just do some Googling for your exact platform and you should find where Docker is storing the volume files.

You can find your exact path by typing:

docker volume inspect yourvolumename

This will give you the fully qualified path to your volume like this:

{
        "CreatedAt": "2022-05-09T21:08:34-06:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/yourvolumename/_data",
        "Name": "yourvolumename",
        "Options": {},
        "Scope": "local"
}

On Linux it’s typically available at:

/var/lib/docker/volumes/yourvolumename/_data

On Windows it’s at

C:\ProgramData\DockerDesktop

but may be located at something more like

\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

if you are using WSL (Windows Subsystem for Linux).


On Mac it’s typically

~/Library/Containers/com.docker.docker/Data/vms/0/

If you are using Docker Desktop on Mac then you need to access the Docker VM with the following command first:

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

You can then normally access the Docker volumes using the path you found in the first step with docker volume inspect.

File Locations

Most people will want to edit server.properties. You can make the changes to the file and then restart the container to make them effective.
Backups are stored in the “backups” folder
Log files with timestamps are stored in the “logs” folder.

Plugin Support for Purpur / Paper / Spigot / Bukkit

This is a “Purpur” Minecraft server which has plugin compatibility with Purpur / Paper / Spigot / Bukkit.

Installation is simple. There is a “plugins” folder on your Docker named volume.

Navigate to your server files on your host operating system (see accessing server files section if you don’t know where this is) and you will see the “plugins” folder.

You just need to drop the extracted version of the plugin (a .jar file) into this folder and restart the container. That’s it!

Some plugins have dependencies so make sure you read the installation guide first for the plugin you are looking at.

A popular place to get plugins is: dev.bukkit.org

Troubleshooting Note – Oracle Virtual Machines

A very common problem people have with the Oracle Virtual Machine tutorials out there that typically show you how to use a free VM is that the VM is much more difficult to configure than just about any other product / offering out there.

It is because there are several steps you need to take to open the ports on the Oracle VM. You need to both:

  • Set the ingress ports (TCP/UDP) in the Virtual Cloud Network (VCN) security list
  • *and* set the ingress ports in a Network Security Group assigned to your instance

Both of these settings are typically required before you will be able to connect to your VM instance. This is purely configuration related and has nothing to do with the script or the Minecraft server itself.

I do not recommend this platform due to the configuration difficulty but the people who have gone through the pain of configuring an Oracle VM have had good experiences with it after that point. Just keep in mind it’s going to be a rough ride through the configuration for most people.

Troubleshooting Note – Hyper-V

There is a weird bug in Hyper-V that breaks UDP connections on the Minecraft server. A workaround for this is that you have to use a Generation 1 VM with the Legacy LAN network driver.

There is a second fix that was shared by bpsimons here. For that fix you need to install ethtool first with sudo apt install ethtool. Next in your /etc/network/interfaces file add “offload-tx off” to the bottom as the issue appears to be with TX offloading.

Here’s an example:

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
offload-tx off

This can also be done non-persistently with the following ethtool command:

ethtool -K eth0 tx off

Buy A Coffee / Donate

People have expressed some interest in this (you are all saints, thank you, truly)

  • PayPal: 05jchambers@gmail.com
  • Venmo: @JamesAChambers
  • CashApp: $theremote
  • Bitcoin (BTC): 3H6wkPnL1Kvne7dJQS8h7wB4vndB9KxZP7

Additional Support

The comments section right here is the best place for support. The second best place is the GitHub issues section.

I will add additional documentation based on what problems people are running into / questions people are asking because right now I’m not really sure what those will be yet. Definitely let me know if you need any of these things!

108 thoughts on “Docker Minecraft Purpur Geyser Server”

  1. Avatar for Dirk

    Hi, thank you for this guide.
    I installed the server on my raspberry pi.
    All working good, but the server runs only wenn i have connection ober to the raspberry, wenn I close the terminal the sever stop, how can i make the server running without any connections?
    Thanks

    1. Avatar for James A. Chambers

      Hey Dirk,

      Great question! So the best way is to detach from the server (which will minimize it to the background) by pressing Ctrl+P and then Ctrl+Q.

      This will send it to the background and let you close the terminal. If you want to bring the terminal back you use:

      docker container ls
      docker container attach xxxx

      The xxxx will be the container ID it gives you. This will open the console back up. Hopefully that helps!

      1. Avatar for Dirk

        Thank you for your fast answer, i have tried this already, when i press Ctrl+P and Ctrl+Q the server stay on,
        but when i close the ssh connection to the rasperry the server stops and minecraft dissconnects.

        1. Avatar for James A. Chambers

          Hey Dirk,

          Got it, no problem, this can be a tricky/annoying problem to deal with for sure.

          So what I would do is try running it like this:

          nohup docker-start-line-here &

          What this tells it to do is run it using nohup which stands for “no hangup”. This means that when your SSH session terminates (you hang up) that the process will continue to run.

          You could also use the “screen” application which is meant to let you run applications in the background like this. You can detach from a screen with Ctrl+A + Ctrl+D. That’s how my standalone version works (with screen).

          Those are a couple of ways to do it at least. Hopefully that helps!

  2. Avatar for Michel

    Hello James:
    First of all Thank you for the server.
    I’m new to all this, I was able to get this server up and running by following the easy instructions.
    But I would like to keep a copy of the server and be able to have two or three different ones in docker to start one or the other.
    How should I do it? It’s possible?

    1. Avatar for James A. Chambers

      Hey Michel,

      Great question! So there’s a couple of things to consider here. First of all if you want to run them at the same time they need to all have different ports (as in the custom ports section of the guide). As long as the ports are all different from each other it’s totally fine to do this.

      If you don’t want to run them at the same time but just want to have separate copies of it (which is how I read your question) then the easiest way to do this is through Docker volumes. In all of the commands where I use “yourvolumename” you would use a different volume name for each server. This is totally fine to do as well. All that would change is when you start the server you would use that Docker volume name (for example yourvolumename2) instead of yourvolumename.

      Now if you want to make a copy of an existing server this is pretty easy. Just do a:

      sudo docker volume create yourvolumename2
      sudo cp -rp /var/lib/docker/volumes/yourvolumename /var/lib/docker/volumes/yourvolumename2

      This would create a new volume called yourvolumename2 and then copy all of the files from yourvolumename to yourvolumename2. This would basically be an example of cloning a server if you ran all of the commands from my guide without changing yourvolumename to something else.

      Hopefully that helps!

          1. Avatar for Michel

            Hello:
            I have duplicated the volume, but when I create a new container and start it with this volume, it starts the world at the starting point and does not recover the changes already made.
            Could you help me on this?
            I duplicate the volume, but then how do I create the new container linked to this volume? And change the port so it doesn’t crash?

            1. Avatar for James A. Chambers

              Hey Michel,

              Everything needs to be stopped to do this. You can do it with the GUI if you want but you need to be root. We are just going to copy the folder. You are going to copy /var/lib/docker/volumes/yourvolumename to /var/lib/docker/volumes/yourvolumename2.

              The server has to be closed to do this. To set custom ports see the custom ports section of the guide:

              docker run -it -v yourvolumename:/minecraft -p 12345:12345 -e Port=12345 -p 54321:54321/udp -p 54321:54321 -e BedrockPort=54321 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

              If the server is starting blank then you probably did something like not closing the other server first before trying to copy the folder. It is literally just a copy paste operation though.

              For me to help with this you’ll need to show me all of your commands. It’s literally just those two I shared so you’re doing something wrong here if it’s creating a completely blank server.

              I mean just roughly speaking have you gone in there and looked at the volumes? What does your volumes folder look like? Is it empty? It sounds like it’s empty:

              root@pop-os:/var/lib/docker/volumes# ls
              backingFsBlockDev metadata.db yourvolumename

              You can see I have yourvolumename. If I go in there:

              root@pop-os:/var/lib/docker/volumes/yourvolumename/_data# ls
              backups eula.txt plugins versions
              banned-ips.json help.yml pufferfish.yml whitelist.json
              banned-players.json libraries purpur.jar world
              bukkit.yml logs purpur.yml world_nether
              cache ops.json server.properties world_the_end
              commands.yml paperclip.jar spigot.yml
              config paper.yml-README.txt usercache.json
              downloads permissions.yml version_history.json

              Now if you go into your one you copied does it look like this? It can’t. It must be empty if it’s starting up blank.

              Definitely do not overthink this. You are copying a folder. Why isn’t the folder copying? There can only be a few reasons such as you used the wrong path or you didn’t close all of your servers first. You should be able to solve that though just like you would if you copied a folder on your desktop and it wasn’t copying for some reason.

              We don’t need the server to diagnose why we can’t copy one folder to another. We need to see your commands basically because there’s not much that can really go wrong here to be honest other than simple mistakes. We are just copying one folder to another. It will not involve Docker at all other than doing docker volume create to create a blank folder. We then just copy the files into that folder.

              This is exactly the same process as restoring a backup. Your backups are in the backups folder. If you had your server crash you do the exact same thing as I’m telling you to do here. You would do a docker volume create newvolume and then you would extract your backup contents into /lib/docker/volumes/newvolume/_data as the guide outlines. These are just files and folders and you are just copying them. You can also use them without the container / scripts at all if you just copy them to a normal folder and run the server normally.

              It is a simple file copy operation though. For me to help diagnose something like this I need you to literally just post me the contents of your folders. Go into /var/lib/docker/yourvolumename/_data and get me a ls for that directory. Then go to the new your /var/lib/docker/yourvolumename2/_data folder and do a ls on that directory so I can compare them. Then I can look at your operations and see why yourvolumename doesn’t look like yourvolumename2 basically. That is what we need to do. Obviously they should be a 100% match so this should be easy. They won’t match now otherwise it would have all of your server data when it starts up. They can’t be the same.

              I think you’re incredibly close. If it seems like I’m being condescending here it’s not that. You’re incredibly close to making a key breakthrough here and that key breakthrough is that these are just files and folders. I had this same breakthrough / realization when I got started and it’s a key part of learning how to work with it so I was just trying to walk you through and lead you to that same realization but if it came off as condescending that’s always a risk you take when trying to lead people to a conclusion like this (that may seem obvious in retrospect but it really isn’t when you’re starting out and I remember what it’s like).

              I tried to just tell you the answer though and it set you up for failure. You need to understand this actual key fact / context that they’re just regular files/folders and it wouldn’t have seemed like such sorcery to copy a folder. Then the regular things start to make sense that everyone knows such as you shouldn’t try to copy files that are being used (like if the server is running). That won’t work with any other program that has the files in use and it won’t work with this one either. You don’t have to copy them the way I said. If you are in Windows you can just copy them in the GUI and you can do the same on Linux if you sign in as root. You can do this visually is the server is closed just like copying a folder on your desktop.

              That’s the breakthrough you’re going to make though when you understand that as long as you close Docker first these are files and folders just like any other files and folders you’ve been working with your whole life. There is nothing special about the format of the files and you can actually take the files from my container and run them in a regular Minecraft server completely outside of Docker. You can copy and paste them, back them up, or even drag and drop them if you’re signed in to your GUI as root. There is actually very little Docker magic going on here (and none in fact when it comes to duplicating the volume, you are literally just going to copy the folder).

              Hopefully that helps!

              1. Avatar for Michel

                Thank you very much James.

                I close the server with

                stop

                after that I close the container in Portainer.

                sudo docker volume create MinecraftPurpur2

                sudo cp -rp /var/lib/docker/volumes/MinecraftPurpur /var/lib/docker/volumes/MinecraftPurpur2

                Ok finally I change de port to 54322

                docker run -it -v yourvolumename:/MinecraftPurpur -p 12345:12345 -e Port=12345 -p 54322:54322/udp -p 54322:54322 -e BedrockPort=54322 --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

                I can see the new container in Portainer running. I open minecraft in the port 54321 (Ok) and I open it in port 54322 (starting blank)

                Excuse for my ignorance.

              2. Avatar for James A. Chambers

                Hey Michel,

                Excellent work, congratulations! Don’t feel bad about this at all. It’s definitely not a requirement to be a Docker expert to use the containers and that’s a big part of why I wanted to open source it. That way everyone can learn / understand how to work with the Minecraft server and Docker. It’s a journey full of realizations that it’s not nearly as hard as it initially seems when you’re starting out (for both Docker and the Minecraft server administration stuff). It’s empowering and that’s why I’ve stuck with and maintained these types of projects.

                This is a really helpful conversation for others going through it. I remember going through the learning curve just like you are now and you had the same questions that most people just starting out had. Basically the Dockerfile / scripts are basically just the exact commands / methods you are learning how to use manually on the command line to do things like this.

                As you learn the file and folder structures as well as the supporting Docker commands you are actually literally learning one at a time all of the commands / methods that make up the scripts themselves (which are just a prearranged collection of those commands by me for convenience). Before you know it you will be able to look at the source code for the container itself and understand 100% of what you are looking at. It will make perfect sense because you will understand and even have used all the individual commands I’m using in the source code to make it all work together.

                It’s definitely just a little bit of a learning curve though like anything else in IT. I’m sure everyone has encountered technical issues where you know the right qualified person could fix the issue in literally 2 seconds with a single command. Wow, that person must have the easiest job in the world! They only have to do 2 seconds of work and look how easy that was. The reason it looks that way though is because that person has at a minimum years and likely a lifetime of background that lets them understand what is happening and know the exact right command (or how to find it) that quickly. There’s a lot more than 2 seconds of knowledge/skills going on for that to happen but the end-users don’t see it (nor should they if the techs/engineers are doing their job well).

                This is a perfect example of that. It’s just a simple file operation if you understand all of the moving pieces of the container, Docker, and how the Minecraft server works but there’s the rub. You can’t learn that in 2 seconds. I didn’t and nobody can. It’s a situation where even if someone gives you the right answer without the background/context to understand/apply it then you aren’t likely to be successful without understanding some of the other prerequisites to be able to apply that knowledge/solution.

                The context in this case is just understanding how the Docker volume fits into all of this and that it’s really just a normal folder (as long as the container is stopped). It seems like there is a *lot* more going on with them than just being a folder but they actually are just a folder. I wouldn’t have assumed they worked this way when I started out. I would have assumed they’re some weird insane Docker encrypted vault that I can’t even look at / get to / make any sense of. In reality it’s a folder you can navigate to and manipulate just like any other.

                Fortunately like I said you don’t need to be an expert to succeed with Docker and the Minecraft server. They’re much more approachable than they seem especially compared to more complex IT systems that are only meant to be worked with by professionals with training/certifications. Minecraft and Docker are meant to be used by end-users. We’ve seen people from all walks of life succeed at this. All ages and demographics. In fact people with a lot of pre-existing technical skills may be surprised how little that helps them learn the specific commands/concepts for Minecraft and Docker. They are their own thing but they are approachable and designed for anyone to be able to learn.

                Nontechnical people and people who are normally don’t particularly like working with technology have very much been successful. This is because a lot of what you are learning is just basic commands (for both Docker and Minecraft) and these are easy to look up / reference and as you learn them you’ll naturally memorize the ones you use a lot just from pure repetition (for both server admin commands and Docker commands). You don’t have to learn to do anything super technical like learn assembly language or start doing bitwise math operations so anyone who has the desire / will to just try working with them a little bit should be able to learn the “language” of both Minecraft and Docker commands.

                This is a perfect setup. You could duplicate this as many times as you wanted now for as many servers as you wanted. It will scale now from 2 to as many as you’d like (until you run out of ports I suppose as there’s only 65536 ports but that’s a lot of servers).

                Definitely don’t hesitate to stop by if any other questions come up. I’m more than happy to help as it gives me the warm and fuzzies inside to see people making breakthroughs like you’ve made here. It reminds me of myself only a few years back when the community of people using my standalone scripts finally convinced me to try Docker (I was a holdout for years and then I finally listened to them and it turned out great). Enjoy and take care!

              3. Avatar for Michel

                Yeah.

                The problem is in the copy of the folders.
                The copy was not doing well.
                I was copying the folder in side yhe folder.
                Once the content is copied, everything is perfect.
                Thank you

              4. Avatar for James A. Chambers

                Hey Michel,

                For sure, copying them is for sure tricky. On Linux you absolutely need to be sudo or root. This can make trying to upload files over FTP tricky which people have done before (my tip for that situation is to upload them to an intermediate folder like your home folder and then on Linux do a sudo cp from the CLI and not try to use FTP for this, this bypasses a lot of the permission issues and was able to help people struggling with this get going to try an intermediate transfer over FTP and *then* copying them using sudo).

                You’re very welcome, take care!

    1. Avatar for James A. Chambers

      Hey KatuBeltz,

      Great question! So basically what you will want to do is start a new server and then stop the container by doing:

      docker container ls
      docker container stop xxxx

      The first command should give you the ID of your container to stop it with.

      Once you’ve stopped it navigate to the server files (see the section on getting to the server files in the guide if you haven’t found them already) and then we are going to edit server.properties. In the server.properties file you should see the following line:

      level-seed=

      Simply add your seed after level-seed= and save server.properties.

      Now you’ve already successfully changed the world seed at this point but there’s a problem. When you started the server for the first time it will have generated the spawn area and some other areas with the original seed. To fix this simply delete the “world” folders. You can also delete world_nether etc.

      Now finally just start the container up again. It will load a brand new world with your seed. Hopefully that helps!

  3. Avatar for Larry

    Hi!
    I restarted the docker yseterday, but it still shows that it is at 1.19.2 and bedrock has moved to 1.19.3. When a bedrock user signs in it says: This server does not support Java Edition 1.19.3, which is required for Geyser to connect. – The server needs to update or have the ViaVersion plugin installed. Original disconnect message: Outdated server! I’m still on 1.19.2 Any idea about what to do???

    1. Avatar for James A. Chambers

      Hey Larry,

      Start the container with:

      -e Version=1.19.3

      No changes have been made to the container for the update. You just need to start it with the version you want to run.

      If you are having trouble finding the container to stop it do:

      docker container ls

      You can use the container ID given by this command to do:

      sudo docker container stop xxxx

      Now just start the container again with the version you want to run (-e Version=1.19.3). That’s pretty much all there is to it!

      I think it’s hard to grasp but the Minecraft server isn’t in the container. All the container has is a script that connects and downloads the version of Minecraft you tell it to. The server files are not in container that I update at all. They are in your Docker volume and you can physically see the server files and navigate to them. They’re not a part of the container at all and are completely separate (meaning I don’t update them, they’re simply what you ask for when you start the container).

      If you pull the latest one the only difference from yours is the default version is 1.19.3. Fortunately you can take control of this yourself and start it with the version you want (even if I had not got to updating it yet for example but Purpur had posted a newer version). It will eliminate a lot of the confusion you’re having. Just ask it for the version you’d like if that makes sense. If the version exists that you ask for on the Purpur Minecraft servers then none of the container stuff comes into play at all. You don’t need me to update it in other words to change versions (nor do you need to pull the latest unless there have been other changes).

      Following this method 1.19.3 has been working since about 48 hours or so after the vanilla 1.19.3 was released (it has been a few days and probably approaching a week now since this has been fully working). That’s when it was posted on Purpur’s download servers. Anyone could have changed their version to 1.19.3 any time after that point without updating the container (and many did). You will be able to do the same thing next update and all future updates. The container just contains scripts that do what is requested at startup (or use the defaults if nothing is requested as is the case with yours).

      You also don’t have to run the default version for the same reason. If you actually wanted to run 1.19.2 you would use -e Version=1.19.2. It works both ways (although the latest Geyser won’t work with older versions typically which is why you are having trouble now, they have dropped support in the latest Geyser for 1.19.2).

      Just for completeness if you want to pull the latest version of the container (stop the running one first) it’s:

      sudo docker pull 05jchambers/legendary-minecraft-purpur-geyser:latest

      Again, this will just update your default settings (the default value it uses only if you specify nothing). I literally didn’t change a thing and the defaults are only populated if you did *not* give it a -e Version=x. This is by design to give you complete control over the version essentially and a lot more power than if I was baking a permanent unchangeable copy of the Purpur server into the container or something like that.

      Periodically pulling it is a good idea as I do fix bugs / add new features from time to time but at least for solving this immediate problem (and one that is likely to occur every update) you can take control of this yourself via -e Version=x.x.x.

      That should get it going here for you!

      1. Avatar for Larry

        Where doe the argument -e Version=1.19.3 appear?
        I tried: docker container start mcdock -e Version=1.19.3 And: docker container start “mcdock -e Version=1.19.3″…

        1. Avatar for James A. Chambers

          Hey Larry,

          Great question. So the issue here is that the “start” command doesn’t take environment variables. The easiest way to do this is to actually remove the container with:

          sudo docker container rm mcdock
          docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e Version=1.19.3 --name mcdock --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

          Notice I added “–name mcdock” so that it would keep your container name.

          In other words you basically just remove the container instance and recreate it with the environment variables you want. This is safe to do because the container instance doesn’t contain any data. That is in your Docker volume (which I always use as yourvolumename in my examples).

          Hopefully that helps!

  4. Avatar for Manuel

    Hey,
    It seems my geyser isn’t able to update anymore. Clients on the latest bedrock aren’t able to connect at all.

    [12:34:39 WARN]: [Geyser-Spigot] Error whilst checking for Geyser update!
    javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alert.createSSLException(Alert.java:130) ~[?:?]

    1. Avatar for James A. Chambers

      Hey Manuel,

      Interesting! It looks like you’re getting a SSL error. This does not happen on a working installation / connection for sure as I just tested it. It definitely looks like an outdated / broken Docker installation for sure.

      I hope you also pulled the latest version with sudo docker pull 05jchambers/legendary-minecraft-purpur-geyser:latest as well as they are known to not work in the oldest versions of the container.

      Is the Docker environment up to date? Your error is a little bit different of a variation but almost everyone who gets this is running an outdated OS. Debian Buster is pretty common for example and the Docker on there won’t have working DNS for example. I’d suggest to update the OS and give it another go here!

      1. Avatar for Manuel

        Thank you btw, it was indeed a faulty docker installation. Or at least it seemed like it. Did a new docker install and everything seems to be working now.

        One question, if I restart the server, how do I get back into the server screen to do commands etc, you normally end up in after calling the setup line?

        1. Avatar for James A. Chambers

          Hey Manuel,

          Excellent, I’m glad that got it going for you! So the easiest way to do this is with:

          sudo docker container ls

          This will give you the container ID that is running. You can then do:

          sudo docker attach xxxx

          This will attach you to the container instance (like it does when you start it for the first time). You can minimize the instance by using Ctrl+A + Ctrl+D. It will then go back into the background until you attach again.

          Hopefully that helps!

  5. Avatar for Manuel

    Hey James!

    Thanks for this amazing guide and these wonderful tools to make mc server administration so easy!

    My issue is, I’ve set this up, with the automated reboot at 4 am and to use the latest, but I am getting an error that the geyser version is outdated and only bedrock clients up to 1.19.40 are supported. Latest is 1.19.50.

    Did a quick check and it seems Geyser is supporting 1.19.50 already. Any idea what might cause this?

    Thanks again and best regards
    Manu

    1. Avatar for James A. Chambers

      Hey Manuel,

      Welcome! So I think this one will be an easy fix. There were some fixes made to Geyser updates a month or two back but you need to update your container. That should look like:

      sudo docker pull 05jchambers/legendary-minecraft-purpur-geyser:latest

      Then try running again and it should update for you!

  6. Avatar for Michael K

    I just tried this out on an old MacBook3,1 I revived with Ubuntu Server (I’ve been using your Minecraft script on a Raspberry Pi for something like 3 years now). It was crazy easy to get going and my kids are loving it because they can now play with their friends who only have Bedrock! Great way to learn about Docker as well! I have a couple things to add. As I’ve been learning about Docker, I found that it was easier for me to name the container using “–name ” so I don’t have to look up the container ID when attaching to it. You might consider adding that option for others as well. I also learned about creating a restart policy to automatically start the container when Docker starts using “–restart unless-stopped”. To make it like your original Minecraft Server Startup Script I still need to figure out how to get it to automatically shut down the Minecraft server and reboot every day. Do you have any plans to add this functionality? Also, in your original Minecraft Server Startup Script, I was able to modify the script to write the backup to my NAS. This seems more difficult in the Docker container as I don’t think it has access to anything outside the container, right?
    Anyway thanks for all the great work! I kicked in a small amount for my appreciation, though I’m sure you deserve much more!

    1. Avatar for James A. Chambers

      Hey Michael,

      Thank you so much, I definitely received it and I’m very grateful! I’m actually very low on cash right now because I had some SEO issues on the site (that’s why things look slightly different such as no more sidebar and the search box moved to the top etc.) that I fixed and it will take weeks for Google to reindex me back to my proper rankings so my traffic / earnings are low right now. You definitely cheered up my day!

      Your feedback is incredibly valuable as well. I’ve been considering adding the –restart switch to the documentation because that has been coming up in questions/comments. Adding the –name flag is a brilliant idea as well. I know exactly where to put these in the documentation to help people out. I have those to add to the documentation as well as some additional information about fixing Hyper-V that has come up in the past week or two.

      I hope you continue to enjoy the container, thank you and take care!

      EDIT: I missed answering your daily reboot question, that’s my mistake! So it would definitely be possible to add a daily restart within the container. For rebooting the whole machine you’d want to use cron like the standalone script does. I don’t think it would be possible for me to reboot the whole machine from the container but it would definitely be possible to do a daily server restart. I will definitely investigate this as I’d imagine we could pass an environment variable like a DailyRestart=3am or something like that!

      1. Avatar for James A. Chambers

        UPDATE: I was able to add this! The new environment variable is called “ScheduleRestart” and can be used like this:

        docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e ScheduleRestart="03:30" --restart unless-stopped 05jchambers/legendary-minecraft-purpur-geyser:latest

        This line would schedule a restart for 3:30am. Use 24 hour time format so if you wanted 11PM you would use 23:00 for example.

        Make sure you pull the updated changes before trying the environment variables with:

        docker pull 05jchambers/legendary-minecraft-purpur-geyser:latest

        Enjoy!

Leave a Comment

Your email address will not be published. Required fields are marked *

Type here..

Exit mobile version