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!
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.
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!
Just donated a small cuppa coffee. Thanks for creating thus guide and all the support you provide.
Hey Marijn,
Thank you so much, that’s very much appreciated, I hope you continue to enjoy the guide / project!
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?
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!
thanks yeah helps a bunch. and again really great containers!
Hey B45op,
No problem at all, enjoy and take care!
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#
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!
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.
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?
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.
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!
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?
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!
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!
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!
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!
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!
Thanks! Docker certainly has some advantages when dealing with something with multiple moving parts (JVM, server, etc.).
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!
I would offer a better open source suggestion to VScode.
It make look familiar. 😉
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!
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.
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!
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 :)).
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!
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.
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.
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!
Awesome, appreciate it. That did the trick. <3 Thank you
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.