Docker
Run VoxelDash One as a container from the GitHub Container Registry.
VoxelDash One ships as a ready-to-run container image on the GitHub Container Registry. The image bundles the
backend together with the web dashboard, so a single docker run gives you the full thing, no separate UI to build.
The image is published at:
Quick start
Pull the image and run it with host networking, giving it a place to keep its data:
Open http://localhost:7867, create your admin account, and you are ready to create your first server.
Host networking (--network host) is the recommended way to run One. The container shares the host's network stack, so
the dashboard is reachable on 7867 directly and the Minecraft servers One manages, which bind to loopback and
reverse-tunnel back, sit right on the host with nothing to map per server. It is Linux-only; on Docker Desktop
(macOS/Windows) fall back to publishing ports as shown under Without host networking.
Everything One creates, your database, the servers it manages, and the Java runtimes it downloads, lives under /data
inside the container. The -v voxeldash-one-data:/data volume above is what keeps it across restarts and updates. Drop
it and you lose your setup.
Image tags
The registry carries one tag per release channel, plus version-pinned tags, so you can track exactly as closely as you like.
| Tag | Channel | What it points at |
|---|---|---|
latest | Release | The newest stable release |
release | Release | Alias for the newest stable release |
1.2, 1 | Release | The newest stable release in that major / minor line |
1.2.0 | Release | An exact stable version, pinned forever |
beta | Beta | The newest release, pre-releases included |
1.2.0-beta.4 | Beta | An exact pre-release version |
dev | Development | Rebuilt from every commit on master — bleeding edge |
For production, pin a stable version (ghcr.io/gnmyt/voxeldash-one:1.2.0) or follow latest. Use beta to try
upcoming features, and dev only if you want the very latest commit.
Using Docker Compose
A compose.yaml keeps the networking, volume, and restart policy in one place:
Then:
Configuration
The image reads the same environment variables as the binary, with container-friendly defaults already set
(VOXELDASH_HOME=/data). You normally only touch PORT if 7867 clashes with something else, and you should leave
VOXELDASH_HOME and VOXELDASH_UI at their defaults.
| Variable | Default | Description |
|---|---|---|
PORT | 7867 | The port the dashboard and control API listen on |
VOXELDASH_HOME | /data | Where servers, Java runtimes, and the database are stored |
MASTER_HOST | 127.0.0.1 | The host servers use to dial back the reverse tunnel |
Pass them with -e, for example to move the dashboard to port 8080:
With host networking the dashboard simply listens on whatever PORT you set, no separate mapping to keep in sync.
How networking works
The managed Minecraft servers run as child processes inside the container and bind to loopback, then reverse-tunnel
their console and control traffic back to One. With host networking the container's loopback is the host's, so the
servers sit directly on the host network and One's dashboard is reachable on 7867, all without exposing a port per
server.
To let players reach a server from the internet, use the built-in playit.gg forwarding: it gives each server a public address with nothing to configure on the host.
Without host networking
On Docker Desktop (macOS/Windows), host networking is not fully supported, so publish the dashboard port instead:
Leave MASTER_HOST at its default. The managed servers run as child processes inside this same container and dial One
over loopback, so the reverse tunnel works regardless of networking mode. What bridge mode cannot do is expose the game
servers themselves: they bind to loopback inside the container, which Docker's -p publishing (it targets the bridge
interface, not loopback) cannot reach. Use playit.gg forwarding to give players a way in,
it dials out from inside the container and works in any mode.
Persisting and backing up data
The whole state of your instance is the /data volume. To back it up, stop the container and copy the volume, or use a
bind mount instead of a named volume so the files sit in a folder you control:
Back up /srv/voxeldash-one and you have backed up your account, your servers, and their worlds.
Updating
The in-app self-updater is disabled in the container, updates are done by pulling a newer image, which is the normal
Docker workflow. Because all your state lives in the /data volume, recreating the container keeps everything.
With Compose it is simply:
Putting it behind a reverse proxy
One listens on a single port and uses WebSockets for the live console and the reverse tunnel. The same setup as the
binary applies, see the Reverse Proxy guide and point it at the published container
port (7867 by default).