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. It uses the Geyser and Floodgate plugins to accomplish this.
Since it uses the Paper Minecraft server it also supports any additional plugins that are compatible with 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 and you can swap between these two 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 “Paper” 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 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-geyser-floodgate: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-geyser-floodgate:latest
With a custom Minecraft version (add -e Version=1.X.X, must be present on Paper’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-geyser-floodgate: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-geyser-floodgate: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-geyser-floodgate:latest
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-geyser-floodgate: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-geyser-floodgate:latest
Change number of backups:
docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e BackupCount=1 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate: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.
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 Paper / Spigot / Bukkit
This is a “Paper” Minecraft server which has plugin compatibility with 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. The easy 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
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!
Hi James,
I’ve just had Bedrock 1.20.5 pushed to my phone and Geyser no longer let’s me join the server. At the end of the server logs it tells me that Geyser needs an update.
In the comments below, you mentioned that you’d pushed a new version that should pull the updated Geyser version. Do I need to do anything special to get that? This is what I run when I spin up my container…
docker run -it -v akycraft:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e TZ=”Asia/Hong_Kong” –restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest
Is it safe for me to try to manually apply the latest version of Geyser on top of what I have? Would my current container try to revert it back on reboot?
Thanks for your help
Never mind, please ignore my message 😂
I just found out that Docker images don’t automatically update when containers start 😂😂
Container deleted and new image now pulled… and the server is running great on my phone again
Excellent, that should keep it nice and updated now!
Close the server and go ahead and give the latest container version a pull:
sudo docker pull 05jchambers/legendary-minecraft-geyser-floodgate:latest
Hi! I just used that command to pull the latest. It looked like it downloaded and extracted, but when I restarted the server, I still cannot connect with bedrock 1.20.50.
Previous to this, I tried replacing the old geyser.jar with the new. That didn’t work either.
I’ve also made a new volume and container. Still nada.
What am I doing wrong?
Hey Tony,
I’d imagine you are caught in the 1.20.2 to 1.20.4 transition that is going on right now. I saw Paper just started releasing beta versions for 1.20.4 but they never even made a 1.20.3.
You could try -e Version=1.20.4 to try the Paper beta if you’d like to. I’ll probably be changing the default version here shortly to 1.20.4 as Paper gets it out of the beta/pre-release status but you can always change it yourself at any time with the -e Version=1.20.4 flag.
Hopefully that helps!
Thanks for getting back to me! I ended up re-reading some of the other comments and (after a deep breath) deleted the container and that worked. I’ll keep the version tag in mind if it happens again. Thanks for keeping this going, learning how to get my pi and server going has been as much fun as playing the game!
@Tony – It took me a while to come to grips with deleting containers *not* usually being a bad thing 😂
At first I was so scared that it would break something or that work would be lost. Now I’m confident they I’ve got the run command saved away if I ever need it, and even if I lose that we’ve got all these great examples on this page
Hey Tony,
No problem at all, I’m glad you got it going! I know it can be scary to delete the container but the volume is where the data is so it’s totally safe to delete the container (just not the volume).
Enjoy and take care!
How do y’all get pretty avatars in these comments? I’m stuck here with a silhouette and no obvious way to change it XD
Hey AnthonyKellyYip,
I believe the way they do that is by having a WordPress.com account attached to their email and then setting their profile picture there. It’s not supported directly through my site as I don’t allow account registration at all. However, WordPress has some kind of integration that will pull the avatar from your wordpress.com account anyway even though I don’t directly support it here (provided when you fill out a comment you use the same email that your wordpress.com account uses).
Hopefully that helps!
Ah, now it makes sense
Thanks for the info
And now I have a profile picture ☺️
Looks good!
Just want to say this was an absolute breeze to set up. I have yet to test out Geyser. I don’t play much and set this up for my kids, any advice on where I could go to find good ideas for plugins? Thanks so much for putting this together!
Hi James,
I made a world using this container, and after it generated I manually changed it from survival to creative in server.properties
Interestingly, if I connect with Java it is now in creative mode, but bedrock clients seem to see it as a survival world.
Is this expected behaviour or even a bug, or might I be doing something wrong?
Thanks for taking the time to answer these tech-support comments =)
Anthony
I left mine in survival, granted myself OP, and then changed gamemode to creative. hat might help prevent the issue you’re seeing.
Thanks for the suggestion, Arathi
I’m just wondering how best to manage it as I’ll hopefully have some friends joining me if the server is robust enough for us to migrate away from our Bedrock Realm. Would I have to make everyone OP? XD
Nope! Mine is for my kids and I, and once you set their gamemode to creative, it stays that way until you change it back. We’re the same, the server is in survival, but we’re in creative often, and only in survival when we want. haha
Hey Arathi,
Thanks for sharing this. You’re exactly spot on your fix. I had just wrote up a similar post before I saw your reply. Thanks!
Welcome!
Hey AnthonyKellyYip,
This is a well known issue in Geyser. The fix is apparently to either delete the local player profiles and start them over or to use the admin commands and manually set their gamemode to creative.
You can see additional posts about this here and here. From what I’m seeing once you set them once it should stick.
Hopefully that helps!
Also James, in response to your ask to Alex about geyser after you updated.
As it loads, it says Geyser is updated, and then at the end of loading sys that there is a geyser update available
Hey Arathi,
If you are sure you are running the latest version it doesn’t check for updates anymore. All it does is download the latest version every time you start. If it says there’s another version available then they haven’t released it on the web site or the container version you are running is old and has not updated.
Hopefully that helps!
Appreciate it! Thanks James!
Hi James, I’m playing around more with additional plugins and such and Citizens 2 apparently needs to be able to use NPC’s. Apparently, they’re not the same as Villagers. Is this build capable of summoning NPC’s?
Hi James,
Really like this and have been using it a long time now; thanks for working on it (and the original bedrock server on linux scripts you wrote too, which I also used for yonks).
It looks like there’s been an update to Geyser, as both the container console and when joining the game there’s a notification about it. I’ve manually pulled the latest container image which hasn’t updated Geyser either.
This is the first thing I’ve run in Docker, so just wondering two things:
1. Is there a dependency within the image on particular versions of Geyser/Paper/Spigot, or is this simply a (very understandable) ‘time is limited, images get updated when I can’ issue?
2. If there aren’t dependencies, is it possible to edit the image locally to include updated versions of Geyser etc and then start a new instance of the updated image and if so, how would that be reconciled (if at all) by docker if the image in your repo was later updated?
Hey Alex,
The latest Geyser version is downloaded from the web site each time the server starts. It looks like they actually stopped building Geyser the way they have been.
Their public repository seems to have gone silent and been disabled. I’ll have to do an update to fix it. I’ll probably have to make it download the latest Geyser and Spigot every time as they’re no longer providing me with a MD5 hash (similar to Paper). I’ll get it updated before too long to just download the latest every time (sorry to their servers, but if they won’t provide an easy way to do it we’ll just slam them).
EDIT: I’ve uploaded the newest version. Can you give it a try?