Legendary Minecraft Bedrock Container

Minecraft Bedrock Docker Edition
Minecraft Bedrock Docker Edition

I’ve been getting asked to put this together for years including in official GitHub issues. I always knew it would be a great idea but it turned out even better than I expected. This image works great on all platforms including Raspberry Pi!

This is based off my Minecraft Bedrock Linux Dedicated Server scripts for Linux project. I’m going to release a version for the Java Minecraft edition as well so stay tuned for that.

The official GitHub repository is located here.

The official Docker Hub repository is located here.

If you are looking for the Java version of the Docker container it is located here. This is for the Bedrock edition of Minecraft.

You can also run my Geyser + Floodgate Java Minecraft Server container and Bedrock players will be able to connect to it!

Features

  • Sets up the official Minecraft Bedrock Server (currently in alpha testing)
  • Fully operational Minecraft Bedrock edition server in a couple of minutes
  • Adds logging with timestamps to “logs” directory
  • Multiarch Support – all Docker platforms supported including Raspberry Pi
  • Automatic backups when container/server restarts
  • Supports multiple instances — you can run multiple Bedrock servers on the same system
  • Updates automatically to the latest or user-defined version when server is started
  • Files stored in named Docker volume allowing for extremely easy access/editing and leveraging more advanced Docker features such as automatic volume backups
  • *NEW* – Box64 support added for improved speeds on aarch64 (ARM 64 bit)

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 19132:19132/udp -p 19132:19132 -p 19133:19133/udp -p 19133:19133 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

With custom ports:

docker run -it -v yourvolumename:/minecraft -p 12345:12345/udp -p 12345:12345 -p 12346:12346/udp -p 12346:12346 -e PortIPV4=12345 -e PortIPV6=12346 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

IPV4 only:

docker run -it -v yourvolumename:/minecraft -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container: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.

Version Override

In some scenarios you may want to run a specific version of the Bedrock server. That is now possible by using the “Version” environment variable:

-e Version=1.18.33.02

For example:

docker run -it -v yourvolumename:/minecraft -e Version=1.18.33.02 -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

This is useful if Microsoft hasn’t released versions of the client and dedicated server at the same time so you can match whichever version your players can connect with.

Clean Environment Variable

If the server is having trouble starting you can clean the downloads folder and force reinstallation of the latest version like this:

docker run -it -v yourvolumename:/minecraft -e Clean=Y -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

This is useful if a download corrupted or something modified your container contents as it will clear everything out and reinstall the latest Bedrock server fresh.

Disable Box64 (aarch64 only):

If you are having trouble running the dedicated server with Box64 support you can tell it to use QEMU instead with:

-e UseQEMU=Y

For example:

docker run -it -v yourvolumename:/minecraft -e UseQEMU=Y -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

TZ (timezone) Environment Variable

You can change the timezone from the default “America/Denver” to own timezone using this environment variable:

docker run -it -v yourvolumename:/minecraft -e TZ="America/Denver" -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

A list of Linux timezones is available here.

NoPermCheck Environment Variable

You can skip the permissions check (can be slow on very large servers) with the NoPermCheck environment variable:

docker run -it -v yourvolumename:/minecraft -e NoPermCheck="Y" -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

ScheduleRestart Environment Variable

You can schedule a restart by using the ScheduleRestart environment variable with a time in 24 hour format:

docker run -it -v yourvolumename:/minecraft -e ScheduleRestart="03:30" -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-bedrock-container:latest

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 fix 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!

guest

63 Comments
Inline Feedbacks
View all comments

Chris H. Bahnsen
Chris H. Bahnsen
5 months ago

Hi,

First of all – thanks for all the work put into the container and the underlying scripts. Your posts have been the reason that I have bought a Raspberry Pi 4 (8 GB) with Kingston M.2 SATA and the Argon One case; what a wonderful combination that works really well.

I have installed Ubuntu Server 22.04 on the Pi along with your Bedrock Docker Container; and as other have commented, it initiates a fully-fledged Minecraft server within a few minutes. No errors – yay!
However, I have had quite a few problems connecting to the server from my LAN. The Raspi Minecraft server shows up automatically on the “Friends tab” in Minecraft on Windows and iOS, but whenever I am trying to join, it shows “unable to connect to world” within approx. 10 seconds.

I have tried to boot up the Minecraft server on my Windows 10 PC, and it allows me to join from iOS devices effortlessly. Hence, I think it is more of a Raspberry Pi-based issue than a router-based issue.
I am using a fresh Ubuntu installation and default settings for my Minecraft docker container. Do you have some useful references or tools that I can use to troubleshoot this issue? I am no stranger to Ubuntu but quite new to Minecraft, so there might be something that I have missed.

I am looking forward to solving this issue; the server is for my daughter and her cousins 🙂

Chris H. Bahnsen
Chris H. Bahnsen
5 months ago

Hi James,

Thank you for the comprehensive troubleshooting. It turned out that the main problem was that I had installed two instances of docker; one via snap and another via apt. That’s what you get from mindlessly following guides on the internet 😉
Once I got rid of the snap version of docker, rebooted, and changed the default ports, the problem was solved.

Running the game on the Raspberry Pi is actually really responsive and I don’t perceive any lag when breaking blocks and moving around. However, there are two issues that hold back the Pi as a useable mini-server:

1. Loading time. When joining on my Windows 10 PC and iPhone, it takes between 2 – 3 minutes from pressing the “join” button to actually accessing the game. This seems to be independent of different values of view-distance in server.properties. I could probably live with the wait (hey, Windows 98!), but it is probably too long for the target audience (6 – 12 years).
2. World generation time; this is lesser of an issue than (1), but you need some patience when flying around, especially in areas that have never been seen before. Even when the areas have been visited before, I have a feeling that the “AutoCompaction” feature of the server actively shrinks the size of the database, removing entries of auto-generated content. When you revisit some areas, it definitely feels like going back to square one, relying on the CPU-intensive seed-based world generation.

Are high loading times on the Pi a common issue, or is it just me? According to your benchmark, the SSD works as intended with a score of just below 8000.

If the x86 emulation continues to improve, I think this could be a nice, self-hosted server. In the meantime, I will probably find other uses for the little Pi.

Keith
Keith
5 months ago

“Fully operational Minecraft Bedrock edition server in a couple of minutes”
This is completely true. I had a Raspberry Pi 400 and purchased an SSD for this project. I’ve never used Docker before and figured that I might as well try it out first to see if it was easier than manually setting everything up. Your container came right up, and although I may have questions later I just wanted to leave a comment thanking you for all of your work.

Volwar
Volwar
5 months ago

Hi,
I’ve used the container using the following command:

docker run -it -v bedrockserver:/minecraft -e Version=1.18.31.04 -p 19132:19132/udp -p 19132:19132 05jchambers/legendary-bedrock-container:latest

However, the container instantly fails, and closes likely due to there being no server.properties (every other server i’ve tried automatically generates it, strange)
I will try to copy one over and run again, but here is the file structure after first run.

drwxr-xr-x 2 root root 4096 May 31 13:39 backups
-rwxrwxr-x 1 root root 97383832 Apr 27 02:35 bedrock_server
-rw-rw-r-- 1 root root 24111 Apr 27 02:26 bedrock_server_how_to.html
-rwxrwxr-x 1 root root 149737912 Apr 27 02:35 bedrock_server_symbols.debug
drwxrwxr-x 26 root root 4096 Apr 27 02:35 behavior_packs
-rw-r--r-- 1 root root 0 May 31 13:41 Dedicated_Server.txt
drwxrwxr-x 8 root root 4096 Apr 27 02:35 definitions
drwxr-xr-x 2 root root 4096 May 31 13:39 downloads
drwxr-xr-x 2 root root 4096 May 31 13:39 logs
-rw-rw-r-- 1 root root 580 Apr 27 02:26 release-notes.txt
drwxrwxr-x 4 root root 4096 Apr 27 02:35 resource_packs
drwxrwxr-x 15 root root 4096 Apr 27 02:35 structures
-rw-r--r-- 1 root root 30 May 31 13:39 version_installed.txt

Ladislav
Ladislav
5 months ago

Hi James,

amazing work getting arm emulation working in the container!

I tried starting the container via docker-compose however I had issues with screen running without a terminal attached. Terminal is available when running via docker run -it, but not when started via docker-compose.

My current workaround is as follows (there is probably a better way):

version: "3.5"
services:
app:
image: 05jchambers/legendary-bedrock-container:arm64v8
restart: "unless-stopped"
ports:
- 19133:19133
- 19133:19133/udp
- 19132:19132
- 19132:19132/udp
volumes:
- ./data:/minecraft
entrypoint: ["/usr/bin/script", "-c TERM=vt100 /bin/bash /scripts/start.sh"]

ItsMeStevieG
ItsMeStevieG
6 months ago

Hi James,
I just stubled upon your container project for Bedrock. I have a solution for Ubuntu 22.04 LTS which doesnt require manual install 🙂

I posted this to the official Bedrock server bugs page. Perhaps this might be a nicer and more reliable way to install it 🙂


It appears they updated the OpenSSL Version in Ubuntu 22.04 LTS.
I was able to resolve myself using the following commands:

echo "deb http://security.ubuntu.com/ubuntu impish-security main" | sudo tee /etc/apt/sources.list.d/impish-security.list

sudo apt-get update
sudo apt-get install libssl1.1

If this works for you, show me some gratitude!

beastminer
beastminer
6 months ago

Hey, how do I get this to work on arm

beastminer
beastminer
6 months ago

Hey, im just simply using an arm machine, though when i run the command, it says: WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

masterchief417
masterchief417
6 months ago

I am having a hard time locating my server folder on omv 6 .I’ve tried using the command you posted for linux but it simply say its a directory.

1 2 3