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 Rudy876

    James I love your guides, thank you really for your time and the support you give. I was wondering – is it possible to run two or three MineCraft server containers at the same time on the RPI? I like to play different worlds with my son (Survive/Creative) and this setup would be hillarious. Thank you.

    1. Avatar for James A. Chambers

      Hey Rudy876,

      Welcome, I’m glad you’re enjoying the container! I have some good news which is you can absolutely run as many of these as you want. The only thing you need to do is make sure to select all new ports for each server. There will be the Java port at 25565 and the Bedrock port as 19132.

      As long as you have all different ports set for the new server it should fire right up and you can have as many as you would like. Hopefully that helps!

  2. Avatar for B45op

    This is a great container, really useful for my wife and I to play. I like playing on the mac and she likes the xbox, it works great as a local lan server for that btw! I am trying to docker exec into it but its failing through portainer. What is the best method to do this or to access the minecraft console?

    1. Avatar for James A. Chambers

      Hey B45opm,

      Great question! The best way is like this:

      docker container ls

      This will give you a table with your “CONTAINER ID” in the first column. Now you can attach like this:

      docker attach xxxx

      This should take you directly into the Minecraft console. It’s possible to exec in by overriding the entrypoint to /bin/bash (–entrypoint=/bin/bash if I remember correctly off the top of my head) but you will actually want to attach to get into the console. Hopefully that helps!

  3. Avatar for Caleb Rector

    Appreciate your work on this! I have a server up and going it worked well for a couple of weeks and now I get an error when trying to connect with bedrock clients. Any idea what might be causing the error? Unable to inflate buffer data sounds like it could be permissions related? I have restarted the container but not the server. Java clients connect fine.

    [17:03:28] [Network Listener - #1/INFO]: [Geyser-Spigot] /192.168.1.183:54742 tried to connect!
    [17:03:28] [Network Listener - #0/WARN]: [io.netty.util.concurrent.AbstractEventExecutor] A task raised an exception. Task: com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener$$Lambda$6020/0x0000000801d76ab8@2b2758df
    java.lang.RuntimeException: Unable to inflate buffer data
    at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:87) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:283) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.lambda$onEncapsulated$0(BedrockRakNetSessionListener.java:39) ~[Geyser-Spigot.jar:?]
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:391) ~[netty-transport-classes-epoll-4.1.77.Final.jar:4.1.77.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    at java.lang.Thread.run(Unknown Source) ~[?:?]
    Caused by: java.util.zip.DataFormatException: incorrect header check
    at java.util.zip.Inflater.inflateBufferBuffer(Native Method) ~[?:?]
    at java.util.zip.Inflater.inflate(Unknown Source) ~[?:?]
    at com.nukkitx.natives.zlib.Java11Inflater.inflate(Java11Inflater.java:21) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.util.Zlib.inflate(Zlib.java:56) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:61) ~[Geyser-Spigot.jar:?]
    ... 9 more
    root@ubuntu:/var/lib/docker/volumes/vol01/_data/logs#

    1. Avatar for James A. Chambers

      Hey Caleb,

      I have only seen this one time before and it was when people were trying to connect to the server when running beta/preview clients. Is this the case? Take a look at this thread here.

      That is the only time I have seen this and we went all the way to the developers. They said it’s a known issue for the beta clients. If it isn’t a beta client then it might be running a really specific Intel 10th gen processor but that’s what we thought it was last time and it was totally the beta client. Can you check those things and let’s see if we can get it going here for you!

      1. Avatar for Caleb Rector

        Thanks James, No beta client, the client trying to connect is an gen 7 ipad, iphone 12, kendal fire (not sure of version) and a windows 10 ryzen 5 5600g. Since this was encountered I have not been able to get a bedrock device to connect to the server.

        1. Avatar for James A. Chambers

          Hey Caleb,

          That is pretty strange. Do you always see that error whenever anybody connects? Can you make sure you’ve pulled the latest version with:

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

          Now that I think of it vp-en submitted a bug request about a week ago that fixed Geyser updates. I bet your Geyser is probably not updating as this behavior isn’t quite fitting what I originally thought it might be. Can you try pulling the latest version and then running again and see if that takes care of it for you?

          1. Avatar for Caleb Rector

            Appreciate the help James! I tracked it down to a DNS issue, devices off my network could connect to the server but internal to my network it was broken. It was odd because it was getting to the server but MC did not allowing the connection. Removed the domain portion of the hostname internal to my network and it is now working.

            1. Avatar for James A. Chambers

              Hey Caleb,

              Excellent work, I don’t think I’ve seen it be that before! I also have my own internal configured DNS so I just as easily could have done this.

              Thank you for sharing this solution as I bet it will help someone out there searching some day to check those. Take care and enjoy!

  4. Avatar for Larry Irwin

    I’m new to docker, but this was fairly simple to get up and running. The Java clients can get in now, but the Bedrock clients aren’t able to for some reason and I’m not sure how to debug it. Their login attempts never appear in the “docker logs -f mcdock” output. The container is running under Ubuntu 22.04.1 LTS on VMWare 6.7 on a Dell R720. Could VMWare 6.7 have UDP issues like Hyper-V?

    1. Avatar for James A. Chambers

      Hey Larry,

      Great question, the UDP issues are the first thing that came to my mind as well from Hyper-V when you mentioned this. I think that you’re thinking about this problem exactly the right way and I’m right with you where your thoughts are going.

      The first thing I can think to try is to go into VMware and try changing the NIC adapter type in the hardware settings. This is really similar to what we do on Hyper-V to get it working. We basically switch it to another network driver that doesn’t have the same bug.

      I take it you have already checked your UFW rules or any firewall rules keeping in mind that Java uses TCP and Bedrock uses UDP. I should mention someone recently had this and they were positive their rules were right but when they completely deleted all the rules out out of ufw and added them back in that fixed it. That was not very long ago so it may be worth it for you as well to try removing any firewall rules and then adding them all back in again clean as this fixed the last one like this.

      I actually run VMware 6.5.0 U3 on my home servers as well (I have a couple of HP Gen8 servers that were surplused years ago when I was still a tech so I rescued them to learn on). They’re old which is why it’s an older version but they’re just fine for a homelab / personal use.

      Let me know what you find! You will be the first VMware one I’ve done like this so we might have to do a few more replies / steps to fully solve this if you’re willing!

      1. Avatar for Larry Irwin

        Well it appears that it’s working just fine… The problem was all the complicated, round-robin Microsoft auth procedures. We can now get to the server from any client!
        (Since I just brought this server instance up for my LAMP applications, I hadn’t set up ufw yet…)
        Thanks!

        1. Avatar for James A. Chambers

          Hey Larry,

          Excellent, glad to hear it wasn’t too crazy! Authentication definitely makes sense as an explanation for this for sure. There are some options to control / disable some parts of it too if it was having too much trouble working but I usually leave it all turned on as some platforms won’t be able to connect without it (such as console).

          Thanks for letting me know what it was as that helps me for sure as well as others reading the comments later so that is appreciated. Enjoy and take care!

  5. Avatar for Rob Rogers

    I’ve been using your excellent Bedrock setup script (“Minecraft Bedrock Edition – Ubuntu Dedicated Server Guide”) and have written some scripts to manage my servers. They use commands like “screen -Rd $1 -X stuff “whitelist add \”$2\”$(printf ‘\r’)”” to execute single Minecraft server commands from outside of the server console. With this Docker/Java setup, is there any way to do the same sort of thing from “outside” of the Docker container, “reaching through” to execute commands on a running server? Some incantation of “docker attach”, perhaps?

    Thanks!

    1. Avatar for James A. Chambers

      Hey Rob,

      Welcome, thanks for the kind words and I’m glad you were able to utilize the standalone version as well! I won’t lie, I do like the Docker version better these days as supporting standalone is hard and can’t provide a universal “good” experience like Docker can as well as a few other reasons such as security, etc.

      The trick you learned with the screen command definitely has you 50% of the way there as this is still necessary. You’re pretty much right about your suspicion than there is a passthrough command you can use on Docker like this for sure.

      You would first identify your Docker container with:

      docker container ls

      which should give you the container ID which we will need for the commands. Next we will use the docker exec command.

      This would basically just add to the front of your commands:

      docker exec -it container screen -Rd

      I think this will work well / mesh well with your existing work and perform just as well. Hopefully that helps!

      1. Avatar for Rob Rogers

        Thanks! Docker certainly has some advantages when dealing with something with multiple moving parts (JVM, server, etc.).

        1. Avatar for James A. Chambers

          Hey Rob,

          No problem! You’re absolutely right for sure. It also has some disadvantages as well.

          One thing I tried to carry over is having all of the container’s source code available and pretty easy to modify just like the standalone version. This is actually super easy using nothing more than VSCode and the official Docker extension (giving you Docker superpowers with a more GUI driven system to ease into it, the exact way I learned).

          If you use something like VSCode (it’s what I use as an IDE for scripting/all this stuff, on my Ubuntu 22.04 desktop in Linux 100%, VSCode works just dandy on it and still seems better to me than alternatives) there is a Docker extension that will let you build the entire container by just right clicking and choosing “Build”.

          It can be as easy to modify as the standalone version! It would probably be cool if I made a child container template for the documentation that is based off of mine. This could use my container as the base image (so it would always get all my updates) and then apply your own layer of changes on top of it. This is also possible and relatively easy but I haven’t documented it yet.

          Enjoy and have fun, let me know if I can help further!

            1. Avatar for James A. Chambers

              Hey Kasper56,

              Great recommendation, I had not seen this before! My first thought/concern was can it use the “Extensions”. This is the functionality I am hooked on for the most part in VSCode.

              It has the fantastic Snyk extension to help find common coding mistakes / security vulnerabilities in the projects. It has the Docker extension which is so much easier for container development as you get a GUI where you can right click and delete on running/stale container builds which normally you have to do several commands on the CLI to get the container id so it’s just faster and nicer. The autoformatting / linting extensions are all are great for cleaning up code (written by you or someone else) basically with the press of a button.

              Then I went and checked out your linked page and it looks like the extensions are all fully supported. That should be everything I need. In fact it looks like it’s literally the identical product but without the telemetry and apparently dramatically worse licensing of the official download. VSCodium is under the MIT license which is what most of my projects are released under as well. I see no reason not to switch immediately.

              Installing this on my Ubuntu systems was as simple as:

              sudo snap install codium --classic

              Thanks for letting me know about it!

      2. Avatar for Rob Rogers

        After your helpful answer this sort of thing worked fine: docker exec -it $1 screen -Rd -X stuff “say $2.$(printf ‘\r’)” (that sends a message to the players). However I recently updated the image and screen is no longer part of it. I added it manually (exec’d a shell and used apt-get on the running container), but now whenever I try it I get a “No screen session found” error.

        Any help appreciated, thanks.

        1. Avatar for James A. Chambers

          Hey Rob,

          Great question! So screen was removed completely. The reason this used to work is the container was actually running screen and not the server. That’s no longer the case. It just runs the Minecraft server directly which means there’s no way to communicate with it using this method. The only reason that worked was because Docker wasn’t actually running the Minecraft server. It does now.

          This is a specialty use case. I’m actually not sure what to do about this. It’s never came up and it has been at least a few months since screen was removed. It actually broke a lot of people’s setups as screen isn’t supported by Kubernetes or a bunch of other technologies.

          The best way to do this would definitely be plugins. The whole screen thing was really a matter of me improperly designing the Docker container. You won’t find another container that works that way because it’s basically “wrong”. It was nice to send a message to the server but really the appropriate place to do that is plugins/commands.

          You could alternatively add it back in. It was only one line change to the script. This was definitely removed for the greater good though. I think you may legitimately be the only one that was using that feature. I remember your original post now that you mention it and I had to come up with that method just for you.

          What might be the best thing is to actually build the screen line back into yours. I removed this all the way back in September of 2022 here. It really wouldn’t be a big deal at all to change that one line in start.sh back to:

          exec screen -L -Logfile /minecraft/logs/minecraft.$(date +%Y.%m.%d.%H.%M.%S).log -mS minecraft /jre/bin/java --add-modules=jdk.incubator.vector -XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics -DPaper.IgnoreJavaVersion=true -Xms400M -jar /minecraft

          instead of:

          exec /jre/bin/java --add-modules=jdk.incubator.vector -XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics -DPaper.IgnoreJavaVersion=true -Xms400M -Xmx${MaxMemory}M -jar /minecraft/purpur.jar

          This is why it’s saying there is no running session. It needs to be running vs. screen.

          I know it seems like a pain but changing the Docker container is really easy actually. You’d just clone the repository and make your changes to the Dockerfile. If I updated the container every week this would get pretty tedious but realistically the container is pretty stable. I made this change in September and you just now received it (which is totally fine). You could totally just resync with it every 3-6 months or so and change that single line back to using screen (and adding it to the apt-get part).

          This is what I’d recommend in this case since you were the only one I know of using this feature (because nobody else would have figured that out and I barely remembered I came up with that at some point). The screen application was breaking it for a lot more than just one person.

          Overall my recommendation would be to use plugins. That’s the proper method for running custom code/scripts within Minecraft generally speaking (at least with Paper/Purpur servers). You could absolutely continue doing what you’re doing though with your existing solution (especially if there’s a lot of work behind it) by just changing that one line back in the container to launch the server using screen. Sorry about that and hopefully that helps!

          1. Avatar for Rob Rogers

            Thanks! The main reason I started on the screens route was to support curfews for my grandkids and their friends. A cron job kicks off a bash script that uses screens to broadcast a server message that curfew is coming, then kicks them off and uses the fwhitelist server command to block them till a morning cron job restores their access. (All this at the request of parents who knew there would be temptations to get up at some ungodly hour to play while the parents were asleep.). All this using a text file for the gamer ID’s. It’s an approach I used with your non-Docker Bedrock server setup, which has been great for us. I suppose I could just stop the server, edit the whitelist, and restart it (this may be an example of the obvious solution being overlooked for a “clever” solution :)).

            1. Avatar for James A. Chambers

              Hey Rob,

              I totally understand! That’s actually a really cool use. I had completely forgot anyone was using it to be totally honest and I had got bug report after bug report about screen breaking the server on Kubernetes clusters as well as Azure. I still feel a little bad as I legitimately thought this was not going to negatively impact anyone to change this. I do remember you upgrading from the standalone version in the past now that you mention it as well as us figuring out how to do this with the Docker version.

              If you’re comfortable writing the bash scripts then I can promise you’d be successful modifying the container as well. I’ll go into a little bit more detail about what that would look like here:

              git clone https://github.com/TheRemote/Legendary-Minecraft-Purpur-Geyser.git
              cd Legendary-Minecraft-Purpur-Geyser
              docker build --rm -f "amd64.Dockerfile" -t legendaryminecraftpurpurgeyser:latest "."

              Now you would change your docker run line to run:

              docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 --restart unless-stopped legendaryminecraftpurpurgeyser:latest

              In between those steps after you clone the repository you would undo my change removing screen (or just change the line back to the screen version of the line overwriting the current one). That’s pretty much all there is to it. All you need to have installed to do this pretty much is Docker itself (which you probably do if you’re running the server). You’ll be shocked at how fast it rebuilds the container. It should only take a few minutes to build (and then it will be even faster after that as you’ll have all of the source images and things like that cached).

              It’s almost as easy as modifying the bash scripts to be honest. It just has an additional step of you run the docker build command to update the container. You could change the -t (tag) parameter to anything you’d like to know it’s your own custom version. Any time you modify the files if you build it again it will update that tag if that makes sense. It’s like a “refresh” step to bake your latest changes into the image.

              Given your background I think you’d very easily be successful cloning and tweaking the container and then just running the build command on it. You could sync back up with my version at any time as more changes get rolled out. You might even be able to come up with more powerful automations than you’re doing now as you’ll essentially have script access again once you’ve cloned it and ran the build command on it.

              Docker really makes it a lot less painful to change these than I would have assumed it is to make changes to these (and I’d imagine most people would assume). “Building” a container sounds like something you’d need a whole environment set up for as when people talk about building things that is usually the case (other than scripting, and frankly even with scripting a lot of the time you need a developer environment setup).

              Fortunately this is all built into Docker already. As long as you have the code (which this one is open source) it’s only one additional command on the CLI basically to rebuild the whole thing. After that you can just run the local version and it’s got whatever changes you integrated in it just like that. I think that should empower you to get your ability to directly modify these back (without having to install a single additional package/piece of software).

              It’s safe to do this and switch between your version and my version using the same volume. You could try this and then switch back to my original version later and it would have no impact. For this to be unsafe you would have to make very extensive changes to the container (to the point where you yourself would know it’s no longer safe to interoperate between the two). For tweaking a few things here and there though this would be totally safe to do.

              Whatever you need help with if anything while addressing this I’d definitely like to help if I can!

              1. Avatar for Rob Rogers

                Thanks again, I’ll look into that. One of the last projects I worked on before retiring in 2016 was setting up swarms of docker containers to test storage servers — I’ll have to dust off that part of my brain.

  6. Avatar for Kasper56

    Silly question I just have the docker restarting with my NUC, how does one access the mc console the typical

    docker exec -i rcon-cli

    Do I need to enable that flag in my docker-compose. Yml (currently testing with your default example) Thanks for your time and putting this together. Cheers.

    1. Avatar for James A. Chambers

      Hey Kasper,

      Great question! You should be able to find them with:

      docker container ls

      You can then reattach with:

      docker attach container

      With the default docker-compose.yml it should have the flags it needs to run in the background so you should be covered there!

      1. Avatar for Kasper56

        One last thing to possibly integrate into your image or docker compose is mc-router, which basically routes you to the proper mc server by sub domain or instance name. All while using the default ports. Could be tricky seeing this is also includes the bedrock ports. Just thought I’d mention it.

Leave a Comment

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

Type here..

Exit mobile version