{"id":13608161,"url":"https://github.com/itzg/docker-minecraft-bedrock-server","last_synced_at":"2026-06-12T17:00:57.987Z","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-03-28T18:27:27.000Z","size":300,"stargazers_count":1740,"open_issues_count":136,"forks_count":293,"subscribers_count":25,"default_branch":"master","last_synced_at":"2026-03-28T20:34:51.814Z","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":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://www.buymeacoffee.com/itzg","https://paypal.me/itzg"]}},"created_at":"2019-07-10T02:01:14.000Z","updated_at":"2026-03-28T18:27:30.000Z","dependencies_parsed_at":"2024-01-16T23:30:25.496Z","dependency_job_id":"9d33918f-16c5-49c5-b6f1-74bb7bc2ac44","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":25,"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":286080680,"owners_count":31778580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T00:11:49.126Z","status":"online","status_checked_at":"2026-04-14T02:00:06.344Z","response_time":153,"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-06-12T17:00:57.968Z","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\nThe following starts a Bedrock Dedicated Server running a default version and\nexposing the default IPv4 UDP port:\n\n```bash\ndocker run -d -it -e EULA=TRUE -p 19132:19132/udp -v mc-bedrock-data:/data itzg/minecraft-bedrock-server\n```\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\nIf your network is dual-stack (IPv4 and IPv6), also map the IPv6 port: `-p 19132:19132/udp -p 19133:19133/udp`\n\nAlternatively, enable `ENABLE_BDS_V6BIND_FIX=true` to serve both from the same port number - see [IPv6 same-port fix](#ipv6-same-port-fix).\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 port 2222 if this environment variable is set to `true`.\n- `ENABLE_BDS_V6BIND_FIX` (default is `false`) : allows `SERVER_PORT` and `SERVER_PORT_V6` to be set to the same port. See [IPv6 same-port fix](#ipv6-same-port-fix). Enabling it should mitigate connectivity issues in dual-stack setups.\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\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- `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  -p 19132:19132/udp itzg/minecraft-bedrock-server\n```\n\n## Exposed Ports\n\n- **UDP** 19132 : the Bedrock server port for IPv4 clients, set by `SERVER_PORT`\n- **UDP** 19133 : the default Bedrock server port for IPv6 clients, set by `SERVER_PORT_V6`\n\n\u003e **NOTE**: with `ENABLE_BDS_V6BIND_FIX=true`, both ports can be set to the same value (e.g. 19132), exposing the same port number for both address families - this is recommended for dual-stack environments to avoid connectivity problems.\n\n## IPv6 same-port fix\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\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 -p 19132:19132/udp -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\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 and exposing UDP ports 19132 (IPv4) and 19133 (IPv6). In the example is named \"bds\", short for \"Bedrock Dedicated Server\", but you can name the service whatever you want\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    ports:\n      - \"19132:19132/udp\"\n      - \"19133:19133/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"}