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!

406 thoughts on “Minecraft Java + Bedrock Server Together – Geyser + Floodgate”

  1. Avatar for Brett

    I am setting up servers for my kids, and one wants a Pixelmon server. So far it looks like you need to run a jar file on the server and is interactive which not sure I could get working in a container. Any tips or ideas on how to mod or add Pixelmon to this docker container?

    1. Avatar for James A. Chambers

      Hey Brett,

      Welcome! So unfortunately it looks like Pixelmon is a “Forge” mod. That’s a different mod/server system than these containers are using. I’ve thought about making a Forge one eventually but I haven’t had the time yet. There are many mods you can run on it but they’re meant for Paper / Bukkit / Spigot.

      Hopefully that helps!

  2. Avatar for Pascal

    Hi James,

    I’ve been trying fro the last couple of days to get this running on my Synology NAS, but for some reason I only see the server as a LAN Game for Bedrock clients.
    I feel like I’m missing something here. I’ve tried portforwarding toward my NAS IP. I’ve tried reverse proxy.
    But alas for now I can’t connect to it via Server Connect.
    If it were only for in home use, this would have been fine, but I would like some friends on the server as well.
    Do you know something that might help me out?
    Thanks in advance 🙂

    1. Avatar for James A. Chambers

      Hey Pascal,

      Theoretically port forwarding it is all there is to it. In practice a lot of internet connections (anything involving shared internet, wireless connections such as 5G, etc.) won’t allow you to port forward. Many times this can be cleared up by calling your ISP and either switching to a plan that allows port forwarding (or sometimes they can enable it for you).

      Another common problem is when people have two routers that assign different IPs (this is called double NAT). You cannot port forward across two different networks. If you have a wired connection such as a cable modem for example and then have another wireless router that assigns it’s own IP addresses that would be double NAT as well.

      I’d recommend trying to forward *any* port to your Synology from the outside. You can even try port 80 as a test or whatever port the Synology web interface is running on. My guess is that it won’t work and this will confirm it’s something to do with your connection or network.

      Hopefully that helps!

  3. Avatar for Arathi

    Hi James,

    Question. I’ve built a new server (much more space cpu and ram). I want to restore a backup from the existing server. It keeps throwing errors. I’m not sure if I’m doing something wrong or not. I copied the backup over into the backups folder, ran ‘docker load -i , and it throws the error “open /var/lib/docker/tmp/docker-import-1358638125/config/json: no such file or directory”

    Is there documentation on restoring the backups that I may have missed?

    1. Avatar for Arathi

      Also, I tried just replacing files/folders, and then I get socket errors about ports already being allocated, so trying to do it officially….

      1. Avatar for James A. Chambers

        Hey Arathi,

        Stop any running containers before trying this with:

        docker container ls
        docker container stop xxxx

        That should eliminate those errors. It’s totally fine to copy the files on top of the volume as long as the server is closed first (otherwise weird things will happen). This will also eliminate your ports are already in use errors you are seeing.

        Hopefully that helps!

  4. Avatar for Arathi

    Hi James,

    Question. I was chatting with DynMap creators and when I mentioned that it takes 19 minutes just to run through their plugin’s loading, and showed them my loading. They mentioned that something is reading every single file which is slowing everything down.

    It has always been normal to me, but the way that the server loads, is it designed to read and display every file?

    1. Avatar for James A. Chambers

      Hey Arathi,

      That’s just the server backing up all of your files each time the server starts. Try using:

      -e NoBackup="plugins"

      That will tell it to skip the plugins folder. If that isn’t the folder that all of the Dynmap files are in then you should change it to the name of the folder that Dynmap is in.

      Of course skipping backing up the folder will make it so that if you have to restore a backup or move servers you’ll have to generate Dynmap all over again. Most people in the past running this program ended up skipping backing up the Dynmap folder to make it not take so long to start up.

      I specifically added that NoBackup environment variable for plugins like this. I’ve never seen a bigger pig when it comes to storage resources than Dynmap though. The person who asked me to add this was also using Dynmap and had a similar problem. It uses a *ton* of space. From what I can tell it is larger than the server itself (much larger). I’ve never even heard of anyone else really using that feature other than Dynmap users.

      In other words you should skip backing up this plugin using the environment variable I described above. It’s way too much of a pig and it’s just not worth it. If a backup needs to be restored it’s better to let it generate it all over again. Your server startup times will drop by like 90% because somehow this plugin generates more data than the rest of your server combined (multiplied by like 10).

      I’m surprised the developers didn’t recognize that all of that output was their own files being backed up. That’s all that is happening here. You’re not the first one to bring it up either and there is nothing you can really do other than blacklist their folder from backups. The problem is simply that Dynmap generates so much junk. That’s why your server is so slow to start. Shutting off backups on their folder will fix it. If you tried to zip or tar your server folder yourself you’d see the exact same output (and it would take just as long).

      Hopefully that helps!

      1. Avatar for Arathi

        Thanks James! Absolutely a great thing to have for when I’m doing things and need to restart the server several times. DynMap is absolutely massive, but so very cool. Initially, I was writing down coordinates, now I can just go look! Mine is much larger than a “normal” server for being personal, and only my two kids and I, but I explore, and it’s created an absolute beast.

  5. Avatar for Arathi

    Can I use DynMap with this? I’ve tried, and I don’t know if I’m just being dumb now, or it’s not possible….
    I’d really love to be able to see where I have explored.

    1. Avatar for Arathi

      I’m getting messages every 100 tiles that it’s rendering. I just cannot see it. I’ve been following the instructions, and I’m failing somehow….

      1. Avatar for James A. Chambers

        Hey Arathi,

        Lots of people have used that plugin before but I’m not familiar with it and can’t really support it. It doesn’t really have anything to do with the container if it’s just a standard plugin.

        When I go to the Dynmap plugin page it says that you need the beta version for this to work for 1.19.4. I’d imagine that is all it is because this is just a normal Paper Minecraft server. 3.5 beta3 is the only one that says it supports Minecraft 1.19.4.

        When I get asked whether a plugin works it’s always user error. This isn’t some custom server that won’t work with certain plugins. It’s just the normal Paper Minecraft server. If it works with Paper / Bukkit / Spigot (and the plugin has been updated for the current Minecraft version) it will work with the container.

        The answer has literally never been that it won’t work with the container frankly because the server is just downloaded from the Paper Minecraft web site. I’m not spinning custom code or anything in this. It’s just the normal server. I get asked about these random plugins all of the time and then I just google them and will find they either haven’t been updated for this version or people need to be running the beta version of the plugin like in this case.

        The only problem I’d expect with this one is accessing the web server. You’ll probably have to add a:

        -p 80:80

        Potentially although I don’t know which port Dynmap tries to host itself on. If it’s a different port than 80 then you’d want to change the port from 80 to whatever it’s supposed to be. It doesn’t sound like this is the part that isn’t working though so I’d imagine it is a version issue as there are several versions of Dynmap available and you need to download the one that says it’s compatible with Minecraft 1.19.4.

        Hopefully that helps!

        1. Avatar for Arathi

          Hi James, The staff at DynMap helped point me in the right direction, and I figured you could use the info in case someone else ever asks. 🙂

          This being my first experience with Docker, they mentioned I’d need to open the port not only on my server, but in docker.

          So adding ‘-p 8123:8123 to your launch commands fixed it. 🙂

  6. Avatar for Dylan

    This is Dylan again. I’m unable to reply to my previous comment since it hasn’t been approved. I changed the server IP address in server.properties, so it couldn’t bind to it. Please disregard my previous
    comment and thank you for your work on this container.

    1. Avatar for James A. Chambers

      Hey Dylan,

      No worries at all. The previous one got stuck in moderation since it had a link but it came through.

      I was actually going to guess it was still running (I usually tell people to restart the entire machine when they get this error). You did well by figuring out it was because of changing the binding address.

      Thanks a ton for sharing your resolution. I’m sure it will help others out who may encounter this. I hope you continue to enjoy the container and take care!

  7. Avatar for Dylan

    Hello!

    Unfortunately, my server has suddenly stopped working. The last time I checked before it stopped working, the server was on paper version 498, and when it updated to 501, it stopped working.
    The error log can be found at https://pastebin.com/raw/HqzGeUYi . Is there an option to use a specific paper version?

    Thanks,
    Dylan

Leave a Comment

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

Type here..

Exit mobile version