Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] binhex - MinecraftBedrockServer

Featured Replies

  • Author
4 hours ago, kerpster said:

You are talking about how to stop the bedrock minecraft from updating correct not the docker itself... just want to make sure.

The above process pins this docker container to a specific tagged version, so it will prevent docker from updating this container, if you want to go back to running latest then you simply reverse what you did, click on 'check for updates' and apply any updates pending.

  • 3 weeks later...
  • Replies 636
  • Views 185.8k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • new feature coming soon, minecraft console accessible via web ui, thought this might please a few people, no nasty docker exec

  • Issue is now resolved and a new release has been published, please pull down at your convenience.

  • yes, create a /config/permissions.json file, edit it and add your xuid and grant yourself whatever permissions you need, e.g.:-   [ { "permission": "operator","xuid": "12345678123

Posted Images

I have a question on the backup process.

I have a few servers set up pointing to separate config folders and separate ports. They all seem to be working fine, except the only one that appears to get the backups done is in the first one I set up. All of them have the backup hours and purge days set to the default 12/14. In the logs on the docker, it shows all of the scripts have the same PID.

Is it possible that the backups are all running and just sending everything to the first backups folder? Or maybe the last server to start is the last set of scripts (if they get overwritten)?

I'm not 100% sure if I set them up correctly for multiple instances (when installing, i just update name, title, ports and config folders). Whenever there's an update to the container for the server jar, I have to manually copy it to the other config folders.

Any suggestions are greatly appreciated!

Sample log:

Created by...

___. .__ .__

\_ |__ |__| ____ | |__ ____ ___ ___

| __ \| |/ \| | \_/ __ \\ \/ /

| \_\ \ | | \ Y \ ___/ > <

|___ /__|___| /___| /\___ >__/\_ \

\/ \/ \/ \/ \/

https://hub.docker.com/u/binhex/

2025-10-06 09:13:16.390700 [info] Host is running unRAID

2025-10-06 09:13:16.404721 [info] System information: Linux 21599087d801 6.12.24-Unraid #1 SMP PREEMPT_DYNAMIC Sat May 3 00:12:52 PDT 2025 x86_64 GNU/Linux

2025-10-06 09:13:16.418234 [info] Application name: 'minecraftserver'

2025-10-06 09:13:16.431188 [info] Base image release tag: '2025092801'

2025-10-06 09:13:16.445050 [info] Output image release tag: '1.21.9-01'

2025-10-06 09:13:16.462793 [info] PUID defined as '99'

2025-10-06 09:13:16.489106 [info] PGID defined as '100'

2025-10-06 09:13:16.529392 [info] UMASK defined as '000'

2025-10-06 09:13:16.550098 [info] Permissions already set for '/config'

2025-10-06 09:13:16.572842 [info] Deleting files in /tmp (non recursive)...

2025-10-06 09:13:16.589441 [info] CREATE_BACKUP_HOURS defined as '12'

2025-10-06 09:13:16.605943 [info] PURGE_BACKUP_DAYS defined as '14'

2025-10-06 09:13:16.621473 [info] ENABLE_WEBUI_CONSOLE defined as 'yes'

2025-10-06 09:13:16.636201 [info] ENABLE_WEBUI_AUTH defined as 'yes'

2025-10-06 09:13:16.650632 [info] WEBUI_USER defined as [REDACTED]

2025-10-06 09:13:16.665838 [info] WEBUI_PASS defined as [REDACTED]

2025-10-06 09:13:16.680721 [info] WEBUI_CONSOLE_TITLE defined as 'Minecraft Java Server 1'

2025-10-06 09:13:16.697477 [info] CUSTOM_JAR_PATH defined as '/config/minecraft/minecraft_server.jar'

2025-10-06 09:13:16.769840 [info] JAVA_VERSION defined as 'latest'

2025-10-06 09:13:16.797693 [info] JAVA_INITIAL_HEAP_SIZE defined as '2048M'

2025-10-06 09:13:16.812668 [info] JAVA_MAX_HEAP_SIZE defined as '2048M'

2025-10-06 09:13:16.827162 [info] JAVA_MAX_THREADS defined as '2'

2025-10-06 09:13:16.841825 [info] JAVA_CUSTOM_ARGS not defined,(via -e JAVA_CUSTOM_ARGS)

2025-10-06 09:13:16.857593 [info] STARTUP_CMD not defined (via -e STARTUP_CMD)

2025-10-06 09:13:16.876767 [info] Starting Supervisor...

2025-10-06 09:13:17,083 INFO Included extra file "/etc/supervisor/conf.d/minecraft-server.conf" during parsing

2025-10-06 09:13:17,083 INFO Set uid to user 0 succeeded

2025-10-06 09:13:17,088 INFO RPC interface 'supervisor' initialized

2025-10-06 09:13:17,088 INFO supervisord started with pid 7

2025-10-06 09:13:18,090 INFO spawned: 'backup-script' with pid 141

2025-10-06 09:13:18,091 INFO spawned: 'purge-script' with pid 142

2025-10-06 09:13:18,091 INFO spawned: 'start-script' with pid 143

2025-10-06 09:13:18,092 INFO reaped unknown pid 8 (exit status 0)

2025-10-06 09:13:18,094 DEBG 'backup-script' stdout output:

[info] Waiting 12 hours before running worlds backup...

2025-10-06 09:13:18,095 INFO success: backup-script entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)

2025-10-06 09:13:18,095 INFO success: purge-script entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)

2025-10-06 09:13:18,095 INFO success: start-script entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)

2025-10-06 09:13:18,095 DEBG 'purge-script' stdout output:

[info] Removing any Minecraft worlds backups with a creation date older than 14 days...

2025-10-06 09:13:18,096 DEBG 'start-script' stdout output:

[info] Minecraft folder '/config/minecraft' already exists, rsyncing newer files...

2025-10-06 09:13:18,097 DEBG 'purge-script' stdout output:

[info] Checking for old backups in 12 hours...

2025-10-06 09:13:18,144 DEBG 'start-script' stdout output:

[info] EULA file exists, checking EULA is set to 'true'...

2025-10-06 09:13:18,146 DEBG 'start-script' stdout output:

[info] EULA set to 'true'

2025-10-06 09:13:18,157 DEBG 'start-script' stdout output:

[info] Minecraft version '1.21.9' detected, adding log4j mitigation for v1.7.*-v1.11.2 to start cmd...

2025-10-06 09:13:18,159 DEBG 'start-script' stdout output:

[info] Starting Minecraft Java process...

2025-10-06 09:13:18,162 DEBG 'start-script' stdout output:

[info] Minecraft Java process is running

2025-10-06 09:13:18,162 DEBG 'start-script' stdout output:

[info] Starting Minecraft console Web UI...

2025-10-06 09:13:18,171 DEBG 'start-script' stderr output:

2025/10/06 09:13:18 GoTTY is starting with command: screen -x minecraft

2025-10-06 09:13:18,172 DEBG 'start-script' stderr output:

2025/10/06 09:13:18 Using Basic Authentication

2025/10/06 09:13:18 Permitting clients to write input to the PTY.

2025/10/06 09:13:18 HTTP server is listening at: http://[::]:8222/

2025/10/06 09:13:18 Alternative URL: http://127.0.0.1:8222/

2025/10/06 09:13:18 Alternative URL: http://[::1]:8222/

2025/10/06 09:13:18 Alternative URL: http://172.17.0.6:8222/

  • 3 weeks later...

supervisordredacted.txtHas anybody else had issues with their minecraft server?

In the game client I just get the vague "An error has occured."

I even tried deleting the entire docker and re-installed it without changing anything from the default and I get the same error.

I added my supervisord with my IP redacted for refference.

Edited by ONI

  • 4 weeks later...

Trying to get this set up for my kid and his friends... How do I secure it properly? I have the port forwarded through my firewall... I use tailscale for everything else but don't want to have to do that for the other kids...

I tried to get the whitelist working and get a reasonable response when I add a user but Whitelist on responds with:

image.png

  • Author
1 hour ago, Arbadacarba said:

Trying to get this set up for my kid and his friends... How do I secure it properly? I have the port forwarded through my firewall... I use tailscale for everything else but don't want to have to do that for the other kids...

I tried to get the whitelist working and get a reasonable response when I add a user but Whitelist on responds with:

image.png

wrong command, that is for minecraft java, not bedrock:- https://minecraft.fandom.com/wiki/Commands/whitelist

  • 3 weeks later...

Whats the normal timeline on getting this updated after minecraft is updated? I had an update today to version 1.21.130 on my pc - and I have checked for updates and everything through unraid. I even added a variable for GAME_VERSION - latest, but its still the older version.

I am running straight vanilla - i got tired years ago of the mod's and having to wait for updates.

17 hours ago, Thrillba said:

Whats the normal timeline on getting this updated after minecraft is updated? I had an update today to version 1.21.130 on my pc - and I have checked for updates and everything through unraid. I even added a variable for GAME_VERSION - latest, but its still the older version.

I am running straight vanilla - i got tired years ago of the mod's and having to wait for updates.

A little bit after I posted this guess what - boom - update. So I guess the answer is ....shortly.

  • 3 weeks later...

I am having a weird issue where villages aren't spawning... I even reinstalled the docker, and spun up a new world again... no mods. I go to where a seedmap says one is... nothing. I even used the console command to locate the closest village... there wasn't one there! Is there some option loading in the background that I don't see that is preventing villages from spawning? Can someone PLEASE create a new world and confirm they can find a village? I created a new world for the first time in a LONG time right after the update a few days ago.

Okay... so I figured it out... I think I had the docker installed for so long that some things just hadn't cleaned up over the years... I uninstalled again AND removed all of the folder structure as well, reinstalled, and then finally villages started appearing again!

Edited by snowmangoh

  • 2 weeks later...

Is there a way to the get the 'Invite to play' button working in the social tab? Currently it's greys out. I'm not sure if it's a server property setting that has caused this.

IMG_20260114_224647.jpg

hi i had this working once long ago dont remember but doesnt seem to be working now when i use it

i have latest minecraft bedrock on windows running i point to my server ip

192.168.0.3 and port 19132 and 19132 and 8222

it wont connect... the logs of the server say the basic authentication is ok here is the logs... but is there a video as im a visual learner... or is there something thats changed from several years ago when i first set it up

text  error  warn  system  array  login  


2026-01-17 10:10:20,136 DEBG 'webui-script' stderr output:
2026/01/17 10:10:20 HTTP server is listening at: http://[::]:8222/

2026-01-17 10:10:20,136 DEBG 'webui-script' stderr output:
2026/01/17 10:10:20 Alternative URL: http://127.0.0.1:8222/
2026/01/17 10:10:20 Alternative URL: http://[::1]:8222/
2026/01/17 10:10:20 Alternative URL: http://172.17.0.3:8222/

2026-01-17 10:10:20,138 DEBG 'backup-script' stdout output:
[info] Waiting 12 hours before running worlds backup...

2026-01-17 10:10:20,139 DEBG 'start-script' stdout output:
[info] Minecraft folder '/config/minecraft' already exists, rsyncing newer files...

2026-01-17 10:10:20,144 DEBG 'purge-script' stdout output:
[info] Checking for old backups in 12 hours...

2026-01-17 10:10:20,314 DEBG 'start-script' stdout output:
[info] Starting Minecraft Bedrock process...

2026-01-17 10:10:20,322 DEBG 'start-script' stdout output:
[info] Minecraft Bedrock process is running

2026-01-17 10:10:21,323 INFO success: start-script entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2026-01-17 10:12:56,428 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:50453

2026-01-17 10:12:56,428 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:50453 200 GET /

2026-01-17 10:12:56,480 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:50453

2026-01-17 10:12:56,480 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:50453 200 GET /css/index.css

2026-01-17 10:12:56,488 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:50453

2026-01-17 10:12:56,488 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:61248

2026-01-17 10:12:56,488 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:61248 200 GET /css/xterm_customize.css

2026-01-17 10:12:56,488 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:50453 200 GET /css/xterm.css

2026-01-17 10:12:56,489 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:55311
2026/01/17 10:12:56 192.168.0.49:55311 200 GET /auth_token.js

2026-01-17 10:12:56,489 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:53044
2026/01/17 10:12:56 192.168.0.49:53044 200 GET /config.js

2026-01-17 10:12:56,489 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:54743

2026-01-17 10:12:56,504 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:54743 200 GET /js/gotty.js

2026-01-17 10:12:56,585 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 New client connected: 192.168.0.49:56129, connections: 1/0

2026-01-17 10:12:56,593 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:54743

2026-01-17 10:12:56,594 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:53044

2026-01-17 10:12:56,594 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:53044 200 GET /manifest.json

2026-01-17 10:12:56,594 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:54743 200 GET /icon.svg

2026-01-17 10:12:56,604 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:54743

2026-01-17 10:12:56,604 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:54743 200 GET /icon_192.png

2026-01-17 10:12:56,608 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 Basic Authentication Succeeded: 192.168.0.49:54743

2026-01-17 10:12:56,608 DEBG 'webui-script' stderr output:
2026/01/17 10:12:56 192.168.0.49:54743 200 GET /favicon.ico
  • 2 months later...

I wanted to share a backup script I wrote for running a Minecraft Bedrock server in Docker on Unraid. This script safely backs up the world by coordinating with the server before copying files.

Features

  • Uses save hold and save query to ensure a consistent backup

  • Waits for Bedrock confirmation: “Data saved. Files are now ready to be copied.”

  • Automatically resumes saves after completion (or on failure)

  • Creates:

    • A timestamped .tar.gz archive

    • A latest uncompressed backup for quick access

  • Rotates backups (keeps newest N copies)

  • Designed for use with User Scripts plugin


⚠️ Configuration Required

Before using, update these variables:

  • CONTAINER → your Minecraft container name

  • SOURCE → path to your world folder

  • DEST → where backups should be stored

  • LOGFILE → path to the Bedrock log inside the container


Script

[code]
#!/bin/bash
set -euo pipefail

DATE=$(date +"%Y-%m-%d_%H-%M-%S")

===== CONFIGURE THESE =====

CONTAINER="your-minecraft-container-name"
SOURCE="/path/to/minecraft/worlds"
DEST="/path/to/backup/location"
LOGFILE="/path/to/bedrock/logfile.log"

===========================

ARCHIVE="$DEST/minecraft_backup_$DATE.tar.gz"
LATEST="$DEST/latest"

MAX_WAIT=120
POLL_INTERVAL=2
KEEP_BACKUPS=10

get_screen_session() {
docker exec -u nobody "$CONTAINER" screen -wipe >/dev/null 2>&1 || true
docker exec -u nobody "$CONTAINER" screen -ls
| awk '/.minecraft[[:space:]]+DetachedDetachedDetached/ {print $1; exit}'
}

send_cmd() {
local session="$1"
local cmd="$2"
docker exec -u nobody "$CONTAINER" screen -S "$session" -p 0 -X stuff $"$cmd\r"
}

wait_for_ready() {
local start_ts now elapsed log_start
start_ts=$(date +%s)

log_start=$(docker exec "$CONTAINER" sh -c "wc -l < '$LOGFILE'")

while true; do
send_cmd "$SCREEN_SESSION" "save query"
sleep "$POLL_INTERVAL"

if docker exec "$CONTAINER" sh -c \

"tail -n +$((log_start + 1)) '$LOGFILE' | grep -q 'Data saved. Files are now ready to be copied.'" ; then

return 0

fi

now=$(date +%s)

elapsed=$((now - start_ts))

if (( elapsed >= MAX_WAIT )); then

return 1

fi

done
}

prune_old_backups() {
mapfile -t backups < <(find "$DEST" -maxdepth 1 -type f -name 'minecraft_backup_*.tar.gz' | sort -r)

if (( ${#backups[@]} > KEEP_BACKUPS )); then
echo "Pruning old backups..."
for old_backup in "${backups[@]:$KEEP_BACKUPS}"; do
echo "Removing $old_backup"
rm -f "$old_backup"
done
fi
}

cleanup() {
if [[ -n "${SCREEN_SESSION:-}" ]]; then
echo "Cleanup: resuming world saves..."
send_cmd "$SCREEN_SESSION" "save resume" || true
fi
}
trap cleanup EXIT

mkdir -p "$DEST"

echo "Looking up active Minecraft screen session..."
SCREEN_SESSION="$(get_screen_session)"

if [[ -z "$SCREEN_SESSION" ]]; then
echo "ERROR: Could not find a live detached Minecraft screen session."
docker exec -u nobody "$CONTAINER" screen -ls || true
exit 1
fi

echo "Using screen session: $SCREEN_SESSION"

echo "Holding world saves..."
send_cmd "$SCREEN_SESSION" "save hold"
sleep 2

echo "Waiting for Bedrock to report files are ready..."
if ! wait_for_ready; then
echo "ERROR: Timed out waiting for Bedrock to report backup readiness."
exit 1
fi

echo "Refreshing latest uncompressed backup..."
rm -rf "$LATEST"
mkdir -p "$LATEST"
cp -a "$SOURCE"/. "$LATEST"/

echo "Creating archive..."
tar -czf "$ARCHIVE" -C "$SOURCE" .

echo "Pruning backups to keep only the newest $KEEP_BACKUPS..."
prune_old_backups

echo "Resuming world saves..."
send_cmd "$SCREEN_SESSION" "save resume"

trap - EXIT
echo "Backup complete: $ARCHIVE"
echo "Latest uncompressed copy: $LATEST"
[/code]


How I Use It

  • Installed via User Scripts plugin

  • Scheduled (e.g., hourly or daily)

  • Runs on the Unraid host (not inside the container)


Notes

  • Assumes your container uses screen (common for many Minecraft Docker images)

  • The latest folder is useful for quick restores without extracting archives

  • The cleanup trap ensures saves resume even if something fails


If anyone has improvements or edge cases I didn’t think about, I’d love feedback 👍

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.