Skip to content

Building from source

Most server owners use the pre-built image. You only need to build from source if you:

  • Need a feature not yet shipped.
  • Want to change the compile-time flags (for example, enable extras that are off by default in the official image).
  • Are running on an architecture without a pre-built image.
  1. Clone the Docker repo:

    Terminal window
    git clone https://github.com/Fancy-Mumble/mumble-docker
    cd mumble-docker
  2. Build the image:

    Terminal window
    docker build .

    This pulls the server source from GitHub, compiles it, builds the bundled plugin libraries, and produces a runtime image. Takes about 10 minutes on a modern machine.

  3. Tag it and use it in your compose file:

    Terminal window
    docker tag <built-image-id> my-fancy-mumble:dev
    services:
    mumble-server:
    image: my-fancy-mumble:dev
ArgumentDefaultPurpose
MUMBLE_GIT_REPOhttps://github.com/Fancy-Mumble/mumble-serverSource repository.
MUMBLE_GIT_BRANCH1.6.xBranch to build.
MUMBLE_VERSIONlatestTag or commit hash to check out.
MUMBLE_CMAKE_ARGS-Dwebrtc-sfu=OFFExtra CMake flags.
MUMBLE_BUILD_NUMBERemptyBuild number embedded in the binary.
PUID / PGID10000UID and GID of the mumble user in the image.

Example, enable the screen-share relay at compile time

Section titled “Example, enable the screen-share relay at compile time”

The default image builds the relay library but does not enable it via CMake for upstream parity. The pre-built image already includes the library; rebuild with the flag if you want it linked in by default:

Terminal window
docker build \
--build-arg MUMBLE_CMAKE_ARGS="-Dwebrtc-sfu=ON" \
.
Terminal window
docker build \
--build-arg MUMBLE_VERSION=v1.6.0 \
.
Terminal window
docker build \
--build-arg MUMBLE_GIT_REPO=https://github.com/youruser/mumble \
--build-arg MUMBLE_GIT_BRANCH=my-feature \
.

The repo ships several Dockerfiles for different use cases:

DockerfilePurpose
DockerfileThe default. Produces a small runtime image.
Dockerfile.debugSame but with debug symbols and verbose logging.
Dockerfile.devMounts your local source tree for hot rebuilds.
Dockerfile.vanillaBuilds the upstream Mumble server (no Fancy features).

Pick with -f:

Terminal window
docker build -f Dockerfile.debug .

The server runs as UID 10000 by default. To match your host user (useful for bind-mounts on a Linux desktop):

Terminal window
docker build --build-arg PUID=1000 --build-arg PGID=1000 .

Or pass at runtime (if the container starts as root):

environment:
PUID: 1000
PGID: 1000

The repository has a helper:

Terminal window
python -m tools dev-build

This:

  1. Picks up your .env.
  2. Mounts your local source if Dockerfile.dev is used.
  3. Re-runs the build with the cached layers.
  4. Restarts the container.

Useful when you are iterating on a patch you intend to upstream.

  • “Permission denied while trying to connect to the Docker daemon socket”: you are not in the docker group.
  • apt-get fails with “not valid yet”: clock skew in BuildKit. The Dockerfiles already pass -o Acquire::Check-Date=false to work around this, but a manual run might miss it.
  • CMake cannot find a dependency: the build image lags upstream. Pull latest and retry, or pin to a known-good MUMBLE_VERSION.

The freshly built image should start the same way as the official one. Look for these log lines:

mumble-server 1.6.x.<build>
plugin file-server: loaded
plugin webrtc-sfu: loaded
plugin push-fcm: loaded
plugin link-previews: loaded

If any plugin is missing, the corresponding feature will be unavailable. Rebuild with the CMake flag for the missing one.

Continue with Upgrade & backup to keep your build fresh.