Bootstrap mode again after completing setup (v0.16.11 Docker)

Issue Description

Environment:

Ubuntu 24.04 (fresh installation)
Official Docker CE
Official image: Package stalwart · GitHub
Docker named volumes
No reverse proxy
No HTTPS
No DNS configuration
No custom environment variables

Compose file:

services:
stalwart:
image: Package stalwart · GitHub
container_name: stalwart
ports:
- “8080:8080”
volumes:
- etc:/etc/stalwart
- data:/var/lib/stalwart

volumes:
etc:
data:

Expected Behavior

After completing the setup wizard successfully, Stalwart should restart and start in normal mode instead of bootstrap mode.

Actual Behavior

The setup wizard finishes successfully and displays “Setup complete”.

After restarting the container, Stalwart enters bootstrap mode again.

The logs always contain:

Server started in bootstrap mode
No configuration file was found. Port 8080 is open for initial setup.

The temporary bootstrap administrator is generated again.

Reproduction Steps

Start a fresh container.
Open http://SERVER_IP:8080/admin
Sign in using the temporary bootstrap credentials.
Complete the setup wizard.
Wait until “Setup complete” is displayed.
Restart the container.
Stalwart starts in bootstrap mode again.

Relevant Log Output

2026-07-02T09:26:46Z WARN Server started in bootstrap mode (server.bootstrap-mode) hostname = “b400eae54602”, details = “No configuration file was found. Port 8080 is open for initial setup.”, version = “0.16.11”

2026-07-02T09:28:28Z INFO Authentication successful (auth.success) accountName = “admin”

2026-07-02T09:30:00Z INFO Shutting down Stalwart Server (server.shutdown) causedBy = “SIGTERM”

Stalwart Version

v0.16.x

Installation Method

Docker

Database Backend

RocksDB

Blob Storage

RocksDB

Search Engine

Internal

Directory Backend

Internal

I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.

on

I have searched this support forum (open and closed topics) and confirm this is not a duplicate.

on

I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.

on

This confirms the config file should persist in /etc/stalwart and it becomes visible upon restart. Let me check troubleshooting section for the exact “bootstrap mode again” scenario, likely about volume mounts or permissions.

If /etc/stalwart/config.json doesn’t exist, it will go back to bootstrap.

Most likely permissions are stopping it from being written.

This means the config store the container starts from isn’t persisting your completed setup. The image starts with --config /etc/stalwart/config.json on the /etc/stalwart volume, and the wizard writes there, so if that write doesn’t survive the restart the server re-enters bootstrap mode. Disrupt’s read is right: it’s the config store not being kept.

Most likely the /etc/stalwart volume isn’t writable by the stalwart user the container runs as, or isn’t actually persisting. Right after “Setup complete” and before restarting, check inside the container: docker exec … ls -la /etc/stalwart, confirm config.json exists and is non-empty, then check it’s still there after the restart. If it vanishes, the volume mount is the problem (an anonymous volume shadowing it, or a uid/permissions mismatch).