{"id":13608161,"url":"https://github.com/itzg/docker-minecraft-bedrock-server","last_synced_at":"2026-10-19T11:07:49.264Z","repository":{"id":35586846,"uuid":"196112361","full_name":"itzg/docker-minecraft-bedrock-server","owner":"itzg","description":"Containerized Minecraft Bedrock Dedicated Server with selectable version","archived":false,"fork":false,"pushed_at":"2026-09-27T13:29:26.000Z","size":370,"stargazers_count":1866,"open_issues_count":139,"forks_count":305,"subscribers_count":24,"default_branch":"master","last_synced_at":"2026-09-27T16:56:52.790Z","etag":null,"topics":["docker-image","hacktoberfest","minecraft"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itzg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"custom":["https://www.buymeacoffee.com/itzg","https://paypal.me/itzg"]}},"created_at":"2019-07-10T02:01:14.000Z","updated_at":"2026-09-27T13:30:21.000Z","dependencies_parsed_at":"2026-09-17T03:29:37.418Z","dependency_job_id":null,"html_url":"https://github.com/itzg/docker-minecraft-bedrock-server","commit_stats":{"total_commits":184,"total_committers":47,"mean_commits":"3.9148936170212765","dds":0.375,"last_synced_commit":"60911761285d1f7e880cc046c6f3851e1c7f4e5d"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/itzg/docker-minecraft-bedrock-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fdocker-minecraft-bedrock-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fdocker-minecraft-bedrock-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fdocker-minecraft-bedrock-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fdocker-minecraft-bedrock-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itzg","download_url":"https://codeload.github.com/itzg/docker-minecraft-bedrock-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fdocker-minecraft-bedrock-server/sbom","scorecard":{"id":497737,"data":{"date":"2025-08-11","repo":{"name":"github.com/itzg/docker-minecraft-bedrock-server","commit":"5ec8f35287437365ef59ab65bb9f572c6c043a7a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Code-Review","score":3,"reason":"Found 10/30 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"11 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/itzg/docker-minecraft-bedrock-server/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/itzg/docker-minecraft-bedrock-server/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/itzg/docker-minecraft-bedrock-server/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/itzg/docker-minecraft-bedrock-server/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/itzg/docker-minecraft-bedrock-server/ci.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating debian to debian@sha256:6d87375016340817ac2391e670971725a9981cfc24e221c47734681ed0f6c0f5","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:23"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T20:55:46.900Z","repository_id":35586846,"created_at":"2025-08-19T20:55:46.901Z","updated_at":"2025-08-19T20:55:46.901Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38355206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-image","hacktoberfest","minecraft"],"created_at":"2024-08-01T19:01:24.802Z","updated_at":"2026-10-19T11:07:49.258Z","avatar_url":"https://github.com/itzg.png","language":"Shell","funding_links":["https://www.buymeacoffee.com/itzg","https://paypal.me/itzg"],"categories":["Shell","Server Software"],"sub_categories":["Server Tools"],"readme":"[![Docker Pulls](https://img.shields.io/docker/pulls/itzg/minecraft-bedrock-server.svg)](https://hub.docker.com/r/itzg/minecraft-bedrock-server/)\n[![GitHub Issues](https://img.shields.io/github/issues-raw/itzg/docker-minecraft-bedrock-server.svg)](https://github.com/itzg/docker-minecraft-bedrock-server/issues)\n[![Build](https://github.com/itzg/docker-minecraft-bedrock-server/workflows/CI/badge.svg)](https://github.com/itzg/docker-minecraft-bedrock-server/actions?query=workflow%3ACI)\n[![Discord](https://img.shields.io/discord/660567679458869252?label=Discord\u0026logo=discord)](https://discord.gg/ScbTrAw)\n[![](https://img.shields.io/badge/Donate-Buy%20me%20a%20coffee-orange.svg)](https://www.buymeacoffee.com/itzg)\n\n## Quickstart\n\nBedrock Dedicated Server (BDS) version 1.26.50 and later uses the newer NetherNet transport by default.\nClients connect to TCP port 19132 first. Then each client uses a UDP port for gameplay.\n\nThe following starts a server on a LAN. Replace `192.168.1.10` with the IP address of the Docker host.\nAlternatively, you can use `\u003cpublic_ip\u003e` in place of an ip address to resolve to your public ip at startup.\n\n```bash\ndocker run -d -it -e EULA=TRUE \\\n  -e SERVER_UDP_PORTS=\"192.168.1.10:19140-19155:19140-19155\" \\\n  -p 19132:19132/tcp -p 19140-19155:19140-19155/udp \\\n  -v mc-bedrock-data:/data itzg/minecraft-bedrock-server\n```\n\nFor more information, see [NetherNet](#nethernet).\n\n\u003e **NOTE**: if you plan on running a server for a longer amount of time it is highly recommended using a management layer such as [Docker Compose](#deploying-with-docker-compose) or [Kubernetes](#deploying-with-kubernetes) to allow for incremental reconfiguration and image upgrades.\n\n## Upgrading to the latest Bedrock server version\n\nWith the `VERSION` variable set to \"LATEST\", which is the default, then the Bedrock server can be upgraded by restarting the container. At every startup, the container checks for the latest version and upgrades, if needed.\n\nThe latest preview version can be requested by setting `VERSION` to \"PREVIEW\".\n\n**NOTE** the Bedrock server software is not bundled into this image. Instead, it is downloaded/upgraded from Mojang only during container startup. As such, releases of this image are independent of releases of Mojang's software. \n\n## Image tags\n\nAll image tags can be located in [Docker Hub](https://hub.docker.com/r/itzg/minecraft-bedrock-server/tags) or [GitHub Container Registry](https://github.com/itzg/docker-minecraft-bedrock-server/pkgs/container/minecraft-bedrock-server).\n\n| Tag      |                                                       |\n|----------|-------------------------------------------------------|\n| `latest` | includes the latest features merged to primary branch |\n| `#.#.#`  | a specific release of the image                       |\n| `stable` | points to the newest image release                    |\n\n\u003e [!NOTE]\n\u003e For example:\n\u003e - `itzg/minecraft-bedrock-server:latest`\n\u003e - `itzg/minecraft-bedrock-server` \n\u003e - `itzg/minecraft-bedrock-server:2026.4.1`\n\u003e - `itzg/minecraft-bedrock-server:stable`\n\n## Looking for a Java Edition Server\n\nFor Minecraft Java Edition you'll need to use this image instead:\n\n[itzg/minecraft-server](https://hub.docker.com/r/itzg/minecraft-server)\n\n## Environment Variables\n\n### Container Specific\n\n- `EULA` (no default) : must be set to `TRUE` to\n  accept the [Minecraft End User License Agreement](https://minecraft.net/terms)\n- `VERSION` (default is `LATEST`) : can be set to a specific server version or the following special values can be used:\n  - `LATEST` : determines the latest (non-preview) version and can be used to auto-upgrade on container start\n  - `PREVIEW` : determines the latest preview version and will auto-upgrade\n  - `EXISTING`: use existing bedrock server executable in `/data`. Must be named either `bedrock_server-{version}` or just `bedrock_server`\n  - otherwise any specific server version can be provided. If it is a preview version, also set `PREVIEW` to \"true\"\n- `UID` (default derived from `/data` owner) : can be set to a specific user ID to run the\n  bedrock server process\n- `GID` (default derived from `/data` owner) : can be set to a specific group ID to run the\n  bedrock server process\n- `TZ` (no default): can be set to a specific timezone like `America/New_York`. This will set the timezone for the Docker container and therefore their logs. Addtionally, if you want to sync the time with the host, you can mount the `/etc/localtime` file from the host to the container like `/etc/localtime:/etc/localtime:ro`.\n- `PACKAGE_BACKUP_KEEP` (`2`) : how many package backups to keep\n- `DIRECT_DOWNLOAD_URL` (no default): This environment variable can be used to provide a **direct download URL** for the Minecraft Bedrock server `.zip` file. When set, this URL will be used instead of attempting to automatically look up the download link from `minecraft.net`. This is particularly useful for CI/CD environments or when the automatic version lookup is temporarily broken due to website changes. Ensure the URL points directly to the `bedrock-server-VERSION.zip` file.\n- `DOWNLOAD_PROGRESS` (default is `false`) : When set to `true`, displays a progress bar during the Bedrock server download instead of running silently.\n- `ENABLE_SSH` (default is `false`) : Enable remote console over SSH on 2222 (or `REMOTE_CONSOLE_BIND_ADDRESS` if provided) if this environment variable is set to `true`.\n- `REMOTE_CONSOLE_BIND_ADDRESS` (default is :2222) : Set the address to bind to for SSH remote console.\n- `ENABLE_BDS_V6BIND_FIX` (default is `false`) : allows `SERVER_PORT` and `SERVER_PORT_V6` to be set to the same port when using the older RakNet protocol. See [IPv6 same-port fix](#ipv6-same-port-fix). Enabling it should mitigate connectivity issues in dual-stack setups using RakNet.\n- `MC_PACK` (no default): Path inside the container to a single archive file (e.g. `.mcpack`, `.mcworld`, `.mctemplate`, `.mcaddon`, or any zip) or to a directory with the same layout. At startup the archive is unpacked (or the directory is read): top-level `behavior_packs/` is merged into `behavior_packs/`, top-level `resource_packs/` into `resource_packs/`, and all other content (when `level.dat` is present) into `worlds/{LEVEL_NAME}`. For `.mcaddon` archives, which use root-level `data/` (behavior) and `resources/` (resource) folders instead of `behavior_packs/` and `resource_packs/`, these are detected and installed automatically using the pack UUID from each manifest as the folder name.\n- `FORCE_WORLD_COPY` (default `false`): When `MC_PACK` contains a world (`level.dat`), set to `true` to remove and replace the existing `worlds/{LEVEL_NAME}` on every startup; otherwise the world is copied only when it does not exist.\n- `FORCE_PACK_COPY` (default `false`): When `MC_PACK` contains `behavior_packs/` or `resource_packs/`, set to `true` to remove and replace existing pack folders with the same name on every startup; otherwise each pack is copied only when it does not already exist.\n- `STOP_SERVER_ANNOUNCE_DELAY` (no default — disabled): opt into a graceful shutdown announcement. When set to a positive whole number of seconds, a heads-up line is written to the server console on container stop (`SIGTERM`); after that many seconds the server is sent `stop` (the usual clean-save shutdown). Unset or `0` keeps the previous behavior of stopping immediately. A second `SIGTERM` skips the remaining wait. Keep the value shorter than the container's stop grace period (e.g. `docker stop -t`, ECS `stopTimeout`, or an EC2 Spot interruption's ~2‑minute window) so the world save isn't cut short by `SIGKILL`.\n- `STOP_SERVER_ANNOUNCE` (default `say Server shutting down in %delay% seconds`): the console line written as the announcement when `STOP_SERVER_ANNOUNCE_DELAY` is active. The `%delay%` token is replaced with the delay's whole-second value. Any server command works (e.g. a `say` or `tellraw`).\n\n\n### Server Properties\n\nThe following environment variables will set the equivalent property in `server.properties`, where each [is described here](https://minecraft.wiki/w/Server.properties#Option_keys).\nTypically, each property is configured instead by the UPPER_SNAKE_CASE equivalent.\n\n- `SERVER_NAME`\n- `GAMEMODE`\n- `FORCE_GAMEMODE`\n- `DIFFICULTY`\n- `ALLOW_CHEATS`\n- `MAX_PLAYERS`\n- `ONLINE_MODE`\n- `WHITE_LIST`\n- `ALLOW_LIST`\n- `SERVER_PORT`\n- `SERVER_PORT_V6`\n- `SERVER_IP`\n- `SERVER_UDP_PORTS`\n- `TRANSPORT`\n- `ENABLE_LAN_VISIBILITY`\n- `VIEW_DISTANCE`\n- `TICK_DISTANCE`\n- `PLAYER_IDLE_TIMEOUT`\n- `MAX_THREADS`\n- `LEVEL_NAME`\n- `LEVEL_SEED`\n- `LEVEL_TYPE`\n- `DEFAULT_PLAYER_PERMISSION_LEVEL`\n- `TEXTUREPACK_REQUIRED`\n- `CONTENT_LOG_FILE_ENABLED`\n- `CONTENT_LOG_LEVEL`\n- `CONTENT_LOG_CONSOLE_OUTPUT_ENABLED`\n- `COMPRESSION_THRESHOLD`\n- `COMPRESSION_ALGORITHM`\n- `SERVER_AUTHORITATIVE_MOVEMENT`\n- `PLAYER_POSITION_ACCEPTANCE_THRESHOLD`\n- `PLAYER_MOVEMENT_SCORE_THRESHOLD`\n- `PLAYER_MOVEMENT_ACTION_DIRECTION_THRESHOLD`\n- `PLAYER_MOVEMENT_DISTANCE_THRESHOLD`\n- `PLAYER_MOVEMENT_DURATION_THRESHOLD_IN_MS`\n- `CORRECT_PLAYER_MOVEMENT`\n- `SERVER_AUTHORITATIVE_BLOCK_BREAKING`\n- `SERVER_AUTHORITATIVE_BLOCK_BREAKING_PICK_RANGE_SCALAR`\n- `CHAT_RESTRICTION`\n- `DISABLE_PLAYER_INTERACTION`\n- `CLIENT_SIDE_CHUNK_GENERATION_ENABLED`\n- `BLOCK_NETWORK_IDS_ARE_HASHES`\n- `DISABLE_PERSONA`\n- `DISABLE_CUSTOM_SKINS`\n- `SERVER_BUILD_RADIUS_RATIO`\n- `ALLOW_OUTBOUND_SCRIPT_DEBUGGING`\n- `ALLOW_INBOUND_SCRIPT_DEBUGGING`\n- `FORCE_INBOUND_DEBUG_PORT`\n- `SCRIPT_DEBUGGER_AUTO_ATTACH`\n- `SCRIPT_DEBUGGER_AUTO_ATTACH_CONNECT_ADDRESS`\n- `SCRIPT_WATCHDOG_ENABLE`\n- `SCRIPT_WATCHDOG_ENABLE_EXCEPTION_HANDLING`\n- `SCRIPT_WATCHDOG_ENABLE_SHUTDOWN`\n- `SCRIPT_WATCHDOG_HANG_EXCEPTION`\n- `SCRIPT_WATCHDOG_HANG_THRESHOLD`\n- `SCRIPT_WATCHDOG_SPIKE_THRESHOLD`\n- `SCRIPT_WATCHDOG_SLOW_THRESHOLD`\n- `SCRIPT_WATCHDOG_MEMORY_WARNING`\n- `SCRIPT_WATCHDOG_MEMORY_LIMIT`\n- `OP_PERMISSION_LEVEL`\n- `EMIT_SERVER_TELEMETRY`\n- `MSA_GAMERTAGS_ONLY`\n- `ITEM_TRANSACTION_LOGGING_ENABLED`\n- `VARIABLES`\n\nFor example, to configure a flat, creative server instead of the default use:\n\n```bash\ndocker run -d -it --name bds-flat-creative \\\n  -e EULA=TRUE -e LEVEL_TYPE=flat -e GAMEMODE=creative \\\n  -e SERVER_UDP_PORTS=\"192.168.1.10:19140-19155:19140-19155\" \\\n  -p 19132:19132/tcp -p 19140-19155:19140-19155/udp itzg/minecraft-bedrock-server\n```\n\n## Exposed Ports\n\n- **TCP** 19132 : NetherNet signaling for IPv4 and IPv6 clients, set by `SERVER_PORT`\n- **UDP** range : NetherNet gameplay, set by `SERVER_UDP_PORTS`. The image does not set a default range. Publish the range that you set.\n- **UDP** 19132 and 19133 : only for `TRANSPORT=raknet`, set by `SERVER_PORT` (IPv4) and `SERVER_PORT_V6` (IPv6)\n\n## NetherNet\n\nBDS 1.26.50 and later sets `transport=nethernet` in `server.properties` by default.\nNetherNet is a WebRTC-based transport.\nFor the BDS documentation, see the \"Transport\" section of `bedrock_server_how_to.html` in the `/data` volume.\nFor the signaling protocol, see the Mojang [NetherNet onboarding guide](https://mojang.github.io/bedrock-protocol-docs/guides/nether-net-onboarding-guide/).\n\nWith NetherNet, BDS uses these ports:\n\n- **TCP `SERVER_PORT`** (default 19132): an HTTP signaling handshake. BDS uses one dual-stack socket for IPv4 and IPv6. `SERVER_PORT_V6` has no effect.\n- **UDP gameplay ports**: BDS uses one UDP port for each client connection. By default, BDS uses a port from the ephemeral range of the operating system. Set `SERVER_UDP_PORTS` to use a fixed range.\n- **UDP 7551**: LAN discovery. Discovery uses broadcast packets, thus it works only on the same subnet.\n\nBDS does not listen on UDP port 19132. If a client sends UDP packets to port 19132, the server does not reply.\n\n`TRANSPORT`, `SERVER_UDP_PORTS`, and `SERVER_IP` are mapped into `server.properties` the same way as the other keys on this list.\n\n### Set the UDP port range\n\nDuring the handshake, BDS sends the client a list of addresses and UDP ports. The client must be able to reach one of these addresses.\n\n- With `network_mode: host`, BDS sends the addresses of the host. Set only the port range, for example `SERVER_UDP_PORTS: \"19140-19155\"`.\n- With a Docker bridge network, rootless networking or NAT, BDS can send addresses that the client cannot reach. Set the address that clients use, for example `SERVER_UDP_PORTS: \"192.168.1.10:19140-19155:19140-19155\"`.\n- IMPORTANT: to access over the internet you need to use the public ip in the `SERVER_UDP_PORTS`, and forward all the ports.\n\nUse an IPv4 or IPv6 literal, not a hostname.\nTo use the public IP address of the host, use the literal string `\u003cpublic_ip\u003e`. At startup, the image replaces it with the result of `curl ifconfig.me`.\n\nUse a range with at least one port for each player (`max-players`, default 10).\nPublish the TCP port and the full UDP range.\nFor an example, see [examples/nethernet/compose.yml](examples/nethernet/compose.yml).\n\n### Firewall\n\nOn the host firewall and on all network firewalls between the clients and the server, allow these inbound connections:\n\n- TCP `SERVER_PORT` (default 19132)\n- The UDP range in `SERVER_UDP_PORTS`\n- UDP 7551, only if you use LAN discovery on the same subnet\n\n### Test the connection\n\nThe container health check connects to the server through the loopback interface.\nThus a \"healthy\" status does not show that clients can connect through the firewall.\nTo do a test, run this command on a different computer:\n\n```bash\ncurl http://\u003cserver-ip\u003e:19132/v1/join\n```\n\nThe server sends its name, version and number of players as JSON.\n\n### Allowlist is on by default\n\nRecent BDS versions set `allow-list=true` by default.\nIf the list is empty, the server refuses all players with the message \"You're not invited to play on this server\".\nAdd players with `ALLOW_LIST_USERS` (see [Allowlist](#allowlist)), or set `ALLOW_LIST=false`.\n\n### RakNet\n\nTo use the earlier UDP transport, set `TRANSPORT=raknet`.\nBDS then listens on UDP `SERVER_PORT` (IPv4, default 19132) and UDP `SERVER_PORT_V6` (IPv6, default 19133).\nPublish both ports, for example `-p 19132:19132/udp -p 19133:19133/udp`.\nBDS 1.26.51 logs an error that NetherNet is the only supported transport.\n\n\u003e **NOTE**: Aternos reports that Minecraft 26.60 removes RakNet. Refer to [NetherNet protocol (Minecraft: Bedrock Edition)](https://support.aternos.org/hc/en-us/articles/39155890785053-NetherNet-protocol-Minecraft-Bedrock-Edition).\n\n## IPv6 same-port fix\n\n\u003e **NOTE**: This fix applies only to `TRANSPORT=raknet`. Do not use it with NetherNet.\n\u003e The shim changes each IPv6 socket that binds to `SERVER_PORT_V6`, which includes the NetherNet TCP socket.\n\u003e If `SERVER_PORT_V6` is equal to `SERVER_PORT`, the TCP socket becomes IPv6-only, and IPv4 clients cannot connect.\n\nBDS binds IPv4 and IPv6 on separate ports by default (19132 and 19133).\nBedrock clients do not implement Happy Eyeballs, so a player whose device\nresolves the hostname to IPv6 connects to port 19132 over IPv6 and times out\n-- the server only accepts IPv6 on 19133. Set `ENABLE_BDS_V6BIND_FIX=true`\nto enable a runtime shim ([bds-ipv6fix](https://github.com/poeggi/bds-ipv6fix))\nthat patches BDS to allow both address families on the same port number, then\nset both properties to the same value:\n\n```yaml\nenvironment:\n  EULA: \"TRUE\"\n  ENABLE_BDS_V6BIND_FIX: \"true\"\n  SERVER_PORT: 19132\n  SERVER_PORT_V6: 19132\nports:\n  - \"19132:19132/udp\"\n```\n\n\u003e **NOTE**: `SERVER_PORT_V6` equal to `SERVER_PORT` requires `ENABLE_BDS_V6BIND_FIX=true`;\n\u003e without it BDS will crash. Always set the IPv6 port via `SERVER_PORT_V6`,\n\u003e do not set ports via `server.properties`.\n\n## Volumes\n\n- `/data` : the location where the downloaded server is expanded and ran. Also contains the\n  configuration properties file `server.properties`\n\n\u003e **NOTE**: On hosts with SELinux enabled (for example Fedora or RHEL), add a label option to bind mounts, for example `-v ./data:/data:z`.\n\u003e Without the option, SELinux can prevent the container from reading or writing the folder.\n\u003e Use `:z` (lower case) if more than one container uses the same folder.\n\u003e `:Z` (upper case) gives the folder a private label for one container only. Named volumes do not need the option.\n\nYou can create a `named volume` and use it as:\n\n```shell\ndocker volume create mc-volume\ndocker run -d -it --name mc-server -e EULA=TRUE \\\n  -e SERVER_UDP_PORTS=\"192.168.1.10:19140-19155:19140-19155\" \\\n  -p 19132:19132/tcp -p 19140-19155:19140-19155/udp \\\n  -v mc-volume:/data itzg/minecraft-bedrock-server\n```\n\nIf you're using a named volume and want the bedrock process to run as a non-root user then you will need to pre-create the volume and `chown` it to the desired user.\n\nFor example, if you want the bedrock server to run with user ID 1000 and group ID 1000, then create and chown the volume named \"bedrock\" using:\n\n```shell script\ndocker run --rm -v bedrock:/data alpine chown 1000:1000 /data\n```\n\nIf using `docker run` then simply reference that volume \"bedrock\" in the `-v` argument. If using a compose file, declare the volume as an external using this type of declaration:\n\n```yaml\nvolumes:\n  bedrock:\n    external:\n      name: bedrock\n```\n\n## Connecting\n\nWhen running the container on your LAN, you can find and connect to the dedicated server\nin the \"LAN Games\" part of the \"Friends\" tab, such as:\n\n![](docs/example-client.jpg)\n\nWith NetherNet, LAN discovery uses UDP port 7551 broadcasts. If the server does not show in \"LAN Games\",\nadd it in the \"Servers\" tab. Use the IP address of the host and the TCP port (default 19132).\n\n## Permissions\n\nThe Bedrock Dedicated Server requires permissions be defined with XUIDs or Xbox GamerTag. Each of `OPS`, `MEMBERS`, and `VISITORS` accepts a comma-separated or newline-separated list of identifiers. For each entry you can use:\n\n- **XUID** — a 16+ digit number (e.g. `2535453759792258`). You can look these up with tools like [MCProfile](https://mcprofile.io/); the XUID is also printed in the server log when a player joins.\n- **Xbox gamertag** — if the value is not a long numeric XUID, it is treated as a gamertag and resolved to an XUID at startup via the [MCProfile API](https://mcprofile.io/api/v1/bedrock/gamertag). This allows using names instead of numbers.\n\nThere are 3 levels of permissions and 3 options to configure each group:\n\nYou can mix XUIDs and gamertags in the same list. The API base URL used for resolving gamertags can be overridden with `RESOLVE_XUID_API_URL` (default: `https://mcprofile.io/api/v1/bedrock/gamertag`).\n\n- `OPS` is used to define operators on the server.\n```shell\n-e OPS=\"1234567890,0987654321,player1\"\n```\n- `MEMBERS` is used to define the members on the server.\n```shell\n-e MEMBERS=\"1234567890,player2\"\n```\n- `VISITORS` is used to define visitors on the server.\n```shell\n-e VISITORS=\"player3,player4\"\n```\n\n`docker-compose.yml` example:\n```yml\n    environment:\n      OPS: |\n        1234567890\n        player1\n      MEMBERS: |\n        player2\n      VISITORS: |\n        player3\n        player4\n```\n\n## Allowlist\n\nThere are two ways to handle a whitelist:\n\nThe first is to set the `ALLOW_LIST` environment variable to true and map in an [allowlist.json](https://minecraft.wiki/w/Whitelist.json) file (previously known as \"whitelist.json\") that is custom-crafted to the container.\n\nThe other is to set the `ALLOW_LIST_USERS` environment variable to a comma-separated or newline-separated of gamer tag usernames and their corresponding XUIDs. Each username should be followed by its XUID, separated by a colon. The server will use these details to match the player.\n\nThere are various tools to look XUIDs up online and they are also printed to the log when a player joins the server.\n\n```shell\n-e ALLOW_LIST_USERS=\"player1:1234567890,player2:0987654321\"\n```\n\n`docker-compose.yml` example:\n```yml\n    environment:\n      ALLOW_LIST_USERS: |\n        player1:1234567890\n        player2:0987654321\n```\n\n## Variables\n\nCustom server variables are supported by Bedrock. Details and usage instructions can be found on the official bedrock documentation, located here:\n\n- [Variables \u0026 Secrets - Minecraft Creator Docs](https://learn.microsoft.com/en-us/minecraft/creator/documents/scriptingservers?view=minecraft-bedrock-stable#variables-and-secrets)\n- [Variables \u0026 Secrets - minecraft/server-admin example](https://learn.microsoft.com/en-us/minecraft/creator/scriptapi/minecraft/server-admin/serversecrets?view=minecraft-bedrock-experimental#getplayerprofilets-1)\n\nCustom server variables are passed in as comma-separated or newline-separated simple key-value pairs or as a full JSON string.\n\nServer variables are parsed into their most likely type (number-like turn into numbers, all other inputs are treated as string) using [jq's `fromjson` command](https://jqlang.github.io/jq/manual/#convert-to-from-json). In the example below, `var1` is a string, `var2` is a number, and `var3` is a string. \n\nFor greater control on types, users can provide a full string JSON representation that is used as-is.\n\nAll variables are written to the variables file located at `config/default/variables.json`. There is no support for Module-specific variable handling at this time.\n\n```shell\n# passing in simple expressions\n-e VARIABLES=\"var1=customStringValue,var2=1234,var3=true\"\n\n# pass in a full json object:\n-e VARIABLES='{\"mobSpawnRate\":22,\"enableCheats\":true,\"worldArray\":[\"My World\", \"Abc\", 123]}'\n```\n\n`docker-compose.yml` example:\n```yml\n    environment:\n      VARIABLES: |\n        var1=customStringValue\n        var2=1234\n        var3=true\n```\n\n## Mods Addons\n\nAlso known as behavior or resource packs, in order to add mods into your server you can follow these steps, tested with [OPS (One Player Sleep)](https://foxynotail.com/addons/ops/) and [bedrocktweaks](https://bedrocktweaks.net/resource-packs/)\n\n\u003e **Tip:** You can import an archive at startup by setting `MC_PACK` to the in-container path (see [Environment Variables](#environment-variables)). The archive is unpacked: `behavior_packs/` and `resource_packs/` go to the server's pack folders; if the archive contains a world (`level.dat`), the rest goes to `worlds/{LEVEL_NAME}`.\n\n1. Install the mcpack or mcaddon on the client side first, just to make it easier to copy the files to the server, for Windows 10 files should be located on `C:\\Users\\USER\\AppData\\Local\\Packages\\Microsoft.MinecraftUWP_*\\LocalState\\games\\com.mojang`.\n2. Copy over the folders of the mods from either behavior_packs or resource_packs into the server's volume.\n\u003e If you want to install them without using a client you should be able to unzip the mods directly into the server's volume, .mcaddon should go into behavior_packs and .mcpack into resource_packs. Both .mcaddon and .mcpack are actually renamed .zip files.\n3. Lastly create on the server's volume `worlds/$level-name/world_behavior_packs.json`, you'll need to add an entry for each mod like on the previous manifest.json, we only need the uuid now called pack_id and the version replacing dots with commas and double quotes with [ ].\n\u003e You can also create a `worlds/$level-name/world_resource_packs.json` but I have seen that putting both resource and behavior packs inside the same json works just fine\n```\n[\n\t{\n\t\t\"pack_id\" : \"5f51f7b7-85dc-44da-a3ef-a48d8414e4d5\",\n\t\t\"version\" : [ 3, 0, 0 ]\n\t}\n]\n```\n4. Restart the server and the mods should be enabled now! when connecting you will get a prompt asking if you want to \"Download \u0026 Join\" or just \"Join\", You need to Download \u0026 Join if you want to actually see the new resource pack added to the server.\nThis prompt is exclusive to resource packs as these alter how minecraft looks while behavior packs alter how minecraft functions and don't need to be downloaded or installed on the client side.\n\u003e If you want to force the resource pack on all clients, there's an option `texturepack-required=false` in `server.properties` that should be changed to `true`.\n\u003e Resource packs can be deleted by going into Settings \u003e Storage \u003e Cached Data, then selecting the pack and clicking on the trash can.\n\nFor more information [FoxyNoTail](https://www.youtube.com/watch?v=nWBM4UFm0rQ\u0026t=1380s) did a video explaining the same on a server running on Windows.\n\n## More information\n\nFor more information about managing Bedrock Dedicated Servers in general, [check out this Reddit post](https://old.reddit.com/user/ProfessorValko/comments/9f438p/bedrock_dedicated_server_tutorial/).\n\n## Executing server commands\n\nThis image comes bundled with a script called `send-command` that will send a Bedrock command and argument to the Bedrock server console. The output of the command only be visible in the container logs.\n\nFor example:\n\n```\ndocker exec CONTAINER_NAME_OR_ID send-command gamerule dofiretick false\n```\n\nAlternatively, with stdin and tty enabled (such as using `-it`), attach to the container's console by its name or ID using:\n\n```shell script\ndocker attach CONTAINER_NAME_OR_ID\n```\n\nWhile attached, you can execute any server-side commands, such as op'ing your player to be admin:\n\n```\ngamerule dofiretick false\n```\n\nWhen finished, detach from the server console using Ctrl-p, Ctrl-q\n\n## Deploying with Docker Compose\n\nThe [examples](examples) directory contains [an example Docker compose file](examples/docker-compose.yml) that declares:\n- A service running the bedrock server container. In the example is named \"bds\", short for \"Bedrock Dedicated Server\", but you can name the service whatever you want.\n- The service exposes TCP port 19132 and UDP ports 19140-19155 for NetherNet. For more information, see [NetherNet](#nethernet).\n  - For LAN only: Replace `192.168.1.10` with the IP address of the Docker host.\n  - For Internet: Replace `192.168.1.10` with a static public IP address, or `\u003cpublic_ip\u003e` to look up your current IP at startup.\n- EULA must be true, other env variables can be defined to configure the server here as well.\n- A volume attached to the service at the container path `/data`\n\n```yaml\nservices:\n  bds:\n    image: itzg/minecraft-bedrock-server\n    environment:\n      EULA: \"TRUE\"\n      # NetherNet: replace 192.168.1.10 with the IP address of the Docker host\n      # If this server is meant to be accessible over the internet, and has a dynamic you\n      # can use \"\u003cpublic_ip\u003e\" in place of an ip address to resolve your public ip on startup\n      SERVER_UDP_PORTS: \"192.168.1.10:19140-19155:19140-19155\"\n    ports:\n      # Note the newer NetherNet protocol uses different ports to RakNet\n      - \"19132:19132/tcp\"\n      - \"19140-19155:19140-19155/udp\"\n    volumes:\n      - ./data:/data\n    stdin_open: true\n    tty: true\n```\n\nStart the server and run in the background using:\n\n```bash\ndocker compose up -d\n```\n\nYou can follow the logs at any time using:\n\n```bash\ndocker compose logs -f\n```\n\n## Deploying with Kubernetes\n\nThe [examples](examples) directory contains [an example Kubernetes manifest file](examples/kubernetes.yml) that declares:\n- a peristent volume claim (using default storage class)\n- a pod deployment that uses the declared PVC\n- a service of type LoadBalancer\n\nThe pod deployment includes some examples of configuring the server properties via environment variables:\n```yaml\nenv:\n- name: EULA\n  value: \"TRUE\"\n- name: GAMEMODE\n  value: survival\n- name: DIFFICULTY\n  value: normal\n```\n\nThe file is deploy-able as-is on most clusters, but has been confirmed on [Docker for Desktop](https://docs.docker.com/docker-for-windows/kubernetes/) and [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/docs/):\n\n```bash\nkubectl apply -f examples/kubernetes.yml\n```\n\nYou can follow the logs of the deployment using:\n\n```bash\nkubectl logs -f deployment/bds\n```\n\n## Community Solutions\n\n- [kaiede/minecraft-bedrock-backup image](https://hub.docker.com/r/kaiede/minecraft-bedrock-backup) by @Kaiede\n- [ghcr.io/edward3h/mc-webhook](https://github.com/edward3h/minecraft-webhook) by @edward3h\n- [Minecraft Bedrock Server Bridge](https://github.com/macchie/minecraft-bedrock-server-bridge) by @macchie\n- [Admincraft](https://github.com/joanroig/Admincraft) by @joanroig\n- [Bedrock Server Manager Using itzg docker image](https://github.com/mugh/minecraft-bedrock-server-manager) by @mugh\n\n## Tutorials\n[@TheTinkerDad]([url](https://github.com/TheTinkerDad)) provides an excellent tutorial on how to host multiple instances on a single port (19132) so that it's discoverable: https://www.youtube.com/watch?v=ds0_ESzjbfs\n\n## Contributing\n\n\u003e When trying to build this Docker Image, ensure that all `.sh` files have a end of line sequence of `LF` not `CLRF` or the build will fail.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzg%2Fdocker-minecraft-bedrock-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitzg%2Fdocker-minecraft-bedrock-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzg%2Fdocker-minecraft-bedrock-server/lists"}