Run a bedrock server in a Docker container.
This Docker image will download the Bedrock Server app and set it up, along with its dependencies, and allow attaching to console via shell.
-
This step is not needed if using bind mounts. Prepare the persistent volumes:
- Create a volume for the configuration:
docker volume create --name "bedrock-config"
- Create a volume for the worlds:
docker volume create --name "bedrock-worlds"
- Create a volume for the configuration:
-
Create the Docker container: Named volumes:
docker create --name=minecraft\ -v "bedrock-config:/bedrock-server/config"\ -v "bedrock-worlds:/bedrock-server/worlds"\ -p 19132:19132/udp\ --restart=unless-stopped\ -it\ docker.home.ashkinaziy.net/prod/bedrock-server
Bind mounts:
docker create --name=minecraft\ -v "/local/path/to/config:/bedrock-server/config"\ -v "/local/path/to/worlds:/bedrock-server/worlds"\ -p 19132:19132/udp\ --restart=unless-stopped\ -it\ docker.home.ashkinaziy.net/prod/bedrock-server
-
Prepare the config files
- Either start the server once and stop it
- or copy the files from the original archive
-
Configure the default files in the
config
volume or bind mount directory:- Configure the
server.properties
to your likings. - Configure the
whitelist.json
in case you have setwhite-list=true
in the above step. Note: Thexuid
is optional and will automatically be added as soon as a matching player connects. Here's an example of awhitelist.json
file:[ { "ignoresPlayerLimit": false, "name": "MyPlayer" }, { "ignoresPlayerLimit": false, "name": "AnotherPlayer", "xuid": "274817248" } ]
- Configure the
permissions.json
and add the operators. This file consists of a list ofpermissions
andxuid
s. Thepermissions
can bemember
,visitor
oroperator
. Thexuid
can be copied from thewhitelist.json
as soon as the user connected once. An example could look like:[ { "permission": "operator", "xuid": "274817248" } ]
- Configure the
-
Start the server:
docker start minecraft
- Stop the server
docker stop minecraft
- Re-create the server with the new image and the same settings (either
manually
or withportainer
or Synologysclean
).
NOTE: When updating from 1.7, you need to use the new installation guide and put yourworlds
andconfig
files into the newly created volumes or use appropriate volume mappings when creating the container. You also need to renameops.json
topermissions.json
. - Start the server
docker start minecraft
There are various commands that can be used in the console. To access the console, you need to attach to the container with the following command:
docker exec -it <container-id or name> /bin/bash
To leave the console without exiting the container, use Ctrl
+a
+ Ctrl
+d
. This will also close the shell.
Here are the commands:
Command syntax | Description |
---|---|
kick {player name or xuid } {reason } |
Immediately kicks a player. The reason will be shown on the kicked players screen. |
stop | Shuts down the server gracefully. |
save {hold or resume or query } |
Used to make atomic backups while the server is running. See the backup section for more information. |
whitelist {on or off or list or reload } |
on and off turns the whitelist on and off. Note that this does not change the value in the server.properties file!list prints the current whitelist used by the serverreload makes the server reload the whitelist from the file. |
whitelist {add or remove } {name } |
Adds or removes a player from the whitelist file. The name parameter should be the Xbox Gamertag of the player you want to add or remove. You don't need to specify a XUID here, it will be resolved the first time the player connects. |
permissions {list or reload } |
list prints the current used permissions list.reload makes the server reload the operator list from the permissions file. |
op {player name } |
Promote a player to operator . This will also persist in permissions.json if the player is authenticated to XBL. If permissions.json is missing it will be created. If the player is not connected to XBL, the player is promoted for the current server session and it will not be persisted on disk. Default server permission level will be assigned to the player after a server restart. |
deop {player name } |
Demote a player to member . This will also persist in permissions.json if the player is authenticated to XBL. If permissions.json is missing it will be created. |
changesetting {setting } {value } |
Changes a server setting without having to restart the server. Currently only two settings are supported to be changed, allow-cheats (true or false ) and difficulty (0, peaceful , 1, easy , 2, normal , 3 or hard ). They do not modify the value that's specified in server.properties . |
The server supports taking backups of the world files while the server is running. It's not particularly friendly for taking manual backups, but works better when automated. The backup (from the servers perspective) consists of three commands:
Command | Description |
---|---|
save hold | This will ask the server to prepare for a backup. It’s asynchronous and will return immediately. |
save query | After calling save hold you should call this command repeatedly to see if the preparation has finished. When it returns a success it will return a file list (with lengths for each file) of the files you need to copy. The server will not pause while this is happening, so some files can be modified while the backup is taking place. As long as you only copy the files in the given file list and truncate the copied files to the specified lengths, then the backup should be valid. |
save resume | When you’re finished with copying the files you should call this to tell the server that it’s okay to remove old files again. |