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

458 Comments
Inline Feedbacks
View all comments
Edward
Edward
1 year ago

Hello! Can’t thank you enough for this amazing docker container. I’ve been semi-successfully implementing it, but there was a recent update to 19.4 and my server is no longer accessible. I’ve restarted it several times over the last few days hoping there would be an update that would allow me to connect, I’m just wondering if I just need to keep waiting. This is the server error I’m seeing:
*[Geyser-Spigot] Your server software does not support the Java version that Geyser requires (1.19.4). Please install ViaVersion or update your server software!*

It’s running on a Mac mini, fyi.

Thanks again!

Peter
Peter
1 year ago

Thanks for this container, great work!
I’m trying to replace my NAS hosted docker bedrock servers with forge server for my son to play from his Xbox. So this cross-platform container would be great if updated to forge. Is that possible? I’m struggling to find a cross-play docker container with forge pre-loaded. Thanks

DeltaGemini
DeltaGemini
1 year ago

It’s working great so far, but I’m wondering if the default install method noted above will automatically update to the latest version of Paper? I’ve been getting an error after my phone updated my Bedrock client to 1.19.4 that the server was still on 1.19.3. i can see that Paper only has beta support for 1.19.4, so maybe that’s why my server isn’t updating?

Also, I’d like to run dynmap which requires port 8123 exposed. Can I just publish a new network port for it, or would I need additional configuration?

Many, many thanks for the image and the help!

DeltaGemini
DeltaGemini
1 year ago
Reply to  DeltaGemini

I did restart the server to try updating it.

DeltaGemini
DeltaGemini
1 year ago

That’s perfect, and I appreciate ViaVersion being integrated. Thank you so much for the image and the help!

Sebastian
Sebastian
1 year ago

Is there a way of getting permanent access rights to the volumes folder of docker? I tried chmod 0777 and it is set but it looks as if the rights are somehow lost after re-loggin.

Sebastian
Sebastian
1 year ago

Hi and thanks for your quick reply. When I use my own folder, I can see the files, but as you said, the owner is still “root”. What I don’t get is, how do you manage plug-ins if you can’t access the files? I should also point out that the server is running on Ubuntu Server w/o a GUI. So it is just that little bit more uncomfortable.
Can you also explain to me, what console the server is using? Apparently it not screen, since the standard screen commands do not work and it is not shown by screen in contrast to the Bedrock server that is running fine. I just would like to know how I can detach from the console and reattach later on.
Thanks again!

Sebastian
Sebastian
1 year ago

Ah, I see, I completely forgot about sudo su. Thanks!
Now one last question, how do I start the server automatically when the PC starts? I use systemd services for the Bedrock server, but will this also work with the standard Docker config? Or the other way round, is the docker run -it…. command intended to be used to start the server in the first place?

Sebastian
Sebastian
1 year ago

Thanks a lot!

Sebastian
Sebastian
1 year ago

Hi,
thanks for all your effort!
I am using your Bedrock version and this works w/o issues. However when I try to follow this tutorial I end up getting an error message that the server can’t be started since the ports are already in use. I am using the custom ports 54321. It did start the very first time and created all of the files and folders. But now it seems as if is no longer working. Also I don’t get how the server is restarted when the PC is booting up. Is there a simple way as for the Bedrock tutorial working with bash files as start.sh and stuff? I am not a Linux pro so I am pretty lost at the moment.

DeltaGemini
DeltaGemini
1 year ago

I have no idea what is causing this, but I can’t OP my Bedrock player. I’ve set the correct UUID and name in op.json, but the player still doesn’t have the rights in-game.

DeltaGemini
DeltaGemini
1 year ago

Thanks, using the console worked. I think I was using the UUID from my Java account and not Bedrock?

makakam
makakam
1 year ago

I have a problem with permissions on this server. I have a plugin and permissions for it are set like that:comment image The problem is they work only once, I mean when I leave the server and rejoin it after a couple of minutes they are broken even though they are still set in luckperms. Only restarting the server fixes it but only for one connection. Why is that?

1 4 5 6 7 8 17