Minecraft Java + Bedrock Server Together – Geyser + Floodgate

Minecraft Geyser + Floodgate Paper Minecraft Server
Minecraft Geyser + Floodgate Paper 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. 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!

Subscribe
Notify of
guest

405 Comments
Inline Feedbacks
View all comments
DeepHeat
DeepHeat
1 year ago

Hello James

Excellent effort in putting the Docker Container together. Well Done Sir. While it took me a couple of attempts to get it on an RPi4-8GB that I had kicking around, it all works well and is stable. If your Docker Container was not available I would have managed to work out the installation process myself. There are now a bunch of very happy Minecrafting girls in the house now. Thank You!

One “issue” that I’ve noticed is that Microsoft require each player to provide permission logins to my server. some of my girls do not have a Microsoft account; is there a way to bypass this and the appearance of the “Featured Servers”

Also, are datapack installations possible?

Many Thanks once again

All the very best

Deep

DeepHeat
DeepHeat
1 year ago

Hello James

Many Thanks for your very prompt and informative reply – it’s very much appreciated.

I made a typo in my original message to you:…
“If your Docker Container was not available I would have managed to work out the installation process myself. ”

Should have read:…
“If your Docker Container was not available I would **not** have managed to work out the installation process myself.”

Oops – Sorry.

My girls each use some form of iDevice while I use a Mac. To keep things simple I could revert temporarily to an iDevice too and keep the focus on Bedrock configurations.

As advised I made the server.properties change (online-mode=true) and restarted the server. The log files acknowledges the change:…

....[17:20:52 WARN]: **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
....[17:20:52 WARN]: The server will make no attempt to authenticate usernames. Beware.

However, when testing this, the “Sign in for Free!” window still pops up. Clicking on the “x” to ignore the offer returns to the server selection screen. I’ve taken a look at the /plugins/floodlight/config.yml file and see many references to “link” and “linking”. Are these related to the “online-mode” from the server.properties file?

I understand your sentiment around the current prices of the RPi4. I’ve used these incredibly efficient little work-horses for various tasks/projects since they first came out in 2012. Fingers crossed that the global shortage of materials ends soon; I would want to see the COVID generation of kids miss out on configuring their own RPi clusters!

All the Very Best

Deep

DeepHeat
DeepHeat
1 year ago

Hello James

We’re still getting Microsoft sign-in prompts.

In /server.properties, I have:
online-mode=false

In /plugins/Geyser-Spigot/config.yml:
auth-type: offline

…and..

address: 127.0.0.1

After making the changes I restarted the container and observed no errors or issues.

DeepHeat
DeepHeat
1 year ago

Oh p**p! That’s a royal pain the backside!

James, many thanks for investigating this for me. It was both educational and emotional. Looks like I am creating child accounts to appease those-who-must-know-everything at microsoft!

Take Good Care

Arathi
Arathi
1 year ago

Server-side resource packs don’t work with this do they? I’ve tried a few things, and the result is always the same.

I connect (on pc), it attempts to download/install, and fails. “Server resource pack couldn’t be applied”

This is in the server: “[Geyser-Spigot] Got disconnected from the skin uploader: pings have to be at least 10 seconds apart”

I’d really like to add some fun elements in, and some fresh graphics. :/

I haven’t tried on the consoles yet, but I don’t know if they’ll appreciate it as much as I will haha. They’ll like it, but I’ll be the one exploring and looking at everything!

Arathi
Arathi
1 year ago

Hi James,

Really appreciate you putting this all together, as I can see it’s working well for others!

I just installed following your instructions above tonight on Ubuntu 20.04, and I can connect from my computer, but trying to connect from the Switch or Xbox gets this info:

[Geyser-Spigot] / tried to connect!
[Geyser-Spigot] Bedrock user with ip: / has disconnected for reason Bedrock client timed out

The second one comes after about a minute.

Is there something I am missing?

Arathi
Arathi
1 year ago

That was it. I constantly forget I’m running Hyper-V for all my servers at home. Thanks a million, kids and I are all connected. PC, Nintendo Switch, and Xbox One!

Amazing. Thanks again James. You’re a hero!

Arathi
Arathi
1 year ago

Also, when I was looking at the last section you have on starting the server up. It looks like you give several different options to load. I added them all together and it appears that the command was just fine with it all together. Have you ever seen any issues in doing this?

This was the way the command was set: sudo docker run -it -v mcjbr:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e Version=1.19.2 -e MaxMemory=6144 -e TZ=”America/Vancouver” -e NoScreen=Y 05jchambers/legendary-minecraft-geyser-floodgate:latest

My next thing I need to sort out is having the server auto run the docker and start the world up automatically rather than needing to go in. Helps if I happen to be away and the server restarts due to any reason (such as the main server needing a reboot for an update for example).

Arathi
Arathi
1 year ago

Awesome! Thanks!

Adam
Adam
1 year ago

Hi James,

I’ve been running this server to play on Java and bedrock together. Currently bedrock is at version 1.19.31 and won’t connect to the server. Does this mean until Mojang release 1.19.31 Java edition it won’t be compatible?

When I run the server there is a message that a Geyser-Spigot update is available, but it doesn’t automatically update to it:

[Geyser-Spigot] There's a new Geyser update available to support Bedrock version 1.19.30. Download it here: https://ci.geysermc.org

Unfortunately I’m not great with Docker, so not exactly sure how to get inside the container to update it myself!

Thanks,
Adam

Adam
Adam
1 year ago

Hi James,

That has fixed it! Thank you so much for your help.

Adam

Pavel
Pavel
1 year ago

Ahhh! That’s what it was! 🙂 Updated Geyser-Spigot twice before checked comments! :))
Thanx for fix? now everythiing working smooth! 🙂

Doug
Doug
1 year ago

Hi James,

Due to the Pi shortage I need to migrate my kiddos server from a RaspberryPiMinecraft server to a cloud based VM with this docker container. What directories do I need to copy, and do I need to change any settings (other than things that are already changed on the original server) before I start up the server?

Thank you for all the work you’ve done!

Tamas
Tamas
1 year ago

Hi James,

First of all, thank you for this image. I really enjoy playing MC with my Son.
My question would be, where and how can I change the Server Seed to a different seed? My son and I have played some reasonable hours and unfortunately my linux system had an upgrade failure/booting into emergency mode and all the data was lost from root.
I refreshed my OS install and tried creating/starting the Server again but it gave me of course a random new seed.

What would be the steps to take to change the Seed?
Do I need to delete the existing again?

I tried to change the paper-world.yml >> level-seed to the one I need / reloaded config in the MC Server terminal / restarted server > that doesn’t seem to do the trick
I hope you can help me with this or point to an article I could follow. I read a lot of docker-compose.. but I don’t really understand how to use it, I’m not even sure if that would be the solution for this case.

Maybe you know an easy/quick way to do this? It wouldn’t be a problem if I have to delete the current image right now, because it is not the one we want anyway. 🙂

Thank you in advance!

Tamas
Tamas
1 year ago

James, thank you so much for your fast reply. That was very easy and worked like a charm!

Oleg
Oleg
1 year ago

Hi James, Thank you for creating the docker, it is great to play with my daughter on weekends! Please point me to the right forum regarding my query as I do not think it has anything to do with docker, just my lack of knowledge about minecraft and inability to locate the information i am looking for. I wanted to learn a bit more about finding villages and villagers and read about locate command.

Unfortunately I am getting result ‘There is no structure with type “minecraft:village”‘, this is all executed from windows 10 bedrock edition using chat. I also tried ‘/locate village_plains’ with same results. I tried different locate command and this one worked ‘/locate structure mineshaft’. Is it the problem with actually not having any villages in my world or me not doing something right? The map was created on nintendo switch and converted to java using chunker.app, but i tried creating new world (changing name in server.properties and restarting docker) but same results. Thank you in advance, Oleg

Oleg
Oleg
1 year ago

Thank you very much James for explaining that and testing it on your side! I tested new syntax ‘/locate structure village_snowy’ and it works. I will go for adventure to find a village and explore.
Please accept a complement on your human skills/customer service and IT knowledge. You are different to most people on the internet forums with detailed knowledge of the product. Your replies are detailed but yet are very simple to understand and you elevate spirits by providing your past experience and letting user know that he is not the only one having these type of problems.
I think more people like you would encourage/broaden necessary IT industries instead of humiliating and discoraging from even starting looking into it.

Oleg
Oleg
1 year ago

Thank you for explaining your approach and reasons James. I hope sharing and open sourcing will keep your drive up for technology and you will create/maintain the products you like.