Skip to main content
verifyngo ships as a minimal Docker image built on distroless/static-debian12. There is no shell, no package manager, and no unnecessary tooling — just the compiled binary. This guide covers running it with docker run and with Docker Compose, including how to persist state and serve custom static files.

Quick start with docker run

The fastest way to get verifyngo running is a single docker run command. Mount your config.json into the container and expose port 8080:

Docker Compose

For production deployments, Docker Compose gives you a repeatable, version-controlled setup. The following file is based on the project’s example and includes a named volume for persistent state:
docker-compose.yml
Bring the stack up with:
To tail logs in real time:

Persisting state

By default, verifyngo keeps its ban and verification state in memory. When the container restarts, that state is lost and previously-banned clients can connect again. To persist state across restarts, mount a named volume at /data and point store.file.path at a file inside it:
config.json
With this configuration verifyngo flushes its in-memory state to /data/store.json every 30 seconds and reloads it on startup. The verifyngo-data named volume in the Compose example above satisfies the /data mount.

Serving custom static files

You can supply a custom logo, stylesheet, or other assets by mounting a local directory into the container and telling verifyngo where to find it with the static_dir config key. Those files are then reachable under /static/ and can be referenced in your branding config. Mount the directory when you run the container:
Then point static_dir at the mount path in your config:
config.json
You can then reference files in your branding block like this:
config.json
The Docker image runs as a non-root user (nonroot:nonroot). Make sure any files and directories you bind-mount into the container are readable by this user. On Linux, chmod o+r on the files (or o+rx on directories) is the simplest fix if you run into permission errors.