RemarkableCloud

Docker image

Vaultwarden in Docker. Your vault, your server.

Vaultwarden is a lightweight, Bitwarden-compatible password manager server written in Rust. It speaks the Bitwarden API, so the official Bitwarden desktop, mobile, browser, and CLI clients connect to it directly, while it runs with a fraction of the resources of the full Bitwarden server stack.

Prefer not to run it yourself? Managed Vaultwarden from $5/mo

ghcr.io/remarkablecloud/vaultwarden
# Vaultwarden in Docker, base pinned by digest
docker pull ghcr.io/remarkablecloud/vaultwarden:1-r1
docker compose up -d
Current build
1-r1, updated Sep 10, 2026
Base
Vaultwarden official, digest-pinned
What's inside
Bitwarden-compatible API, SQLite on one /data volume, signup lockdown notes
Upstream license
Vaultwarden: AGPL-3.0-only

The image

What our image adds.

What changes from upstream Vaultwarden, and why it matters in production.

Digest-pinned base

The official Vaultwarden server image is pinned by digest for reproducible, auditable builds.

OCI provenance labels

(title, description, vendor, source) for supply-chain traceability.

Built-in healthcheck

A container HEALTHCHECK runs against Vaultwarden's /alive endpoint, so an orchestrator only routes traffic to a ready instance. The 1-r1 tag tracks the upstream 1.x line and is pinned by digest to the 1.37.2 release. Vaultwarden's own features are unchanged.

Run it yourself, or not

Same image either way.

Pull it and run it anywhere, or let us run Vaultwarden for you on a managed server with updates, monitoring and snapshots.

Free

Run Vaultwarden yourself

  • Pull it from GHCR and run it on any Docker host
  • The guide below: compose, environment, backups, upgrades
  • You patch, back up and watch it
Read the guide
Managed

Vaultwarden on a managed server

  • Installed for you from this same image, $0 for the app
  • Updates with a snapshot first, monitoring and a managed firewall
  • A 1 GB server from $5/mo billed annually, with room for more apps

The guide

Run it in production.

Compose file, environment reference, hardening, backups and upgrades, written by the people who build the image.

On this page

docker-compose walkthrough

The image ships a standalone docker-compose.yml:

name: vaultwarden

services:
  vaultwarden:
    image: ${VW_IMAGE:-ghcr.io/remarkablecloud/vaultwarden:1-r1}
    restart: unless-stopped
    ports: ["${HTTP_PORT:-8086}:80"]
    environment:
      DOMAIN: ${DOMAIN:-http://localhost:8086}
      SIGNUPS_ALLOWED: ${SIGNUPS_ALLOWED:-true}
    volumes:
      - vw-data:/data

volumes:
  vw-data:

Line by line:

  • image pins the RemarkableCloud Vaultwarden tag, overridable with VW_IMAGE.
  • restart: unless-stopped brings the container back after a crash or reboot.
  • ports maps host port 8086 to container port 80. This is for standalone runs only. Behind Traefik, no port is published; the proxy routes to port 80 on the internal network.
  • DOMAIN is the public URL of the server and must be exact (see the reference below).
  • SIGNUPS_ALLOWED controls open registration.
  • volumes mounts the vw-data volume at /data, which holds the SQLite database, attachments, RSA keys, and config.json.

Set your real URL and start it, for example DOMAIN=https://vault.example.com docker compose up -d. Open the URL, create your account, then close registration.

Environment variable reference

VariableApp Platform valueStandalone defaultNotes
DOMAINhttps://your-hostnamehttp://localhost:8086The exact public URL of the server. WebAuthn and two-factor authentication, attachment and Send links, and email links all depend on it being correct and using https in production.
SIGNUPS_ALLOWEDtruetrueWhether new users can self-register. Set to false after you create your account.
HTTP_PORTnot applicable8086Host port mapped to container port 80 in standalone compose only (not published behind Traefik).
VW_IMAGEnot applicableghcr.io/remarkablecloud/vaultwarden:1-r1Image reference override for standalone compose.

Hardening notes

  • Close registration. The catalog ships with SIGNUPS_ALLOWED=true so you can create the first account. Set it to false immediately afterward so no one else can register. For controlled onboarding later, use Vaultwarden’s invitation flow instead of reopening sign-ups.
  • Set DOMAIN correctly. WebAuthn and two-factor authentication are bound to the exact origin. Use the real public https URL, with no trailing slash and no port.
  • TLS at the proxy. In production the container serves plain HTTP on port 80 and Traefik terminates TLS. Keep the container off any public port and let the proxy reach it internally. Vaultwarden should always be reached over HTTPS.
  • Admin panel is off by default. Vaultwarden’s /admin panel stays disabled until you set an ADMIN_TOKEN environment variable (an upstream option). This image does not set one. If you enable it, use a long random token, ideally an Argon2 hash as documented upstream.
  • Runs as root. The upstream server runs as root. Keep it isolated behind the proxy and do not publish its port.

Backup and upgrade

Backup. All state lives in the vw-data volume at /data: the SQLite database (db.sqlite3), uploaded attachments, the RSA key files, and config.json. Back up the whole volume on a schedule. The RSA key files matter: keep them, or existing sessions and some tokens are invalidated after a restore. For a consistent database copy, either stop the container briefly before copying the volume, or run the SQLite backup API against the mounted database from the host or any container that has the sqlite3 CLI (for example sqlite3 db.sqlite3 ".backup 'backup.sqlite3'"), so you never capture a database mid-write.

Upgrade. Pull the newer RemarkableCloud tag and recreate the container. The vw-data volume persists, so vaults, attachments, and keys carry over. Vaultwarden runs any needed schema migrations on start, and because it uses SQLite there is no separate database server to upgrade. Read the CHANGELOG for the target tag first, and back up the volume before upgrading.

Changelog

Each build is pinned by digest and recorded here, so you can see what changed before you pull a new tag.

  1. 1-r1 Current Sep 10, 2026 Initial RemarkableCloud build of Vaultwarden.
Full changelog on GitHub

Vaultwarden and other product names are trademarks of their respective owners. RemarkableCloud is not affiliated with or endorsed by them.

FAQ

Vaultwarden in Docker, answered.

Short answers from the people who build and run this image.

Which clients work with Vaultwarden?

The official Bitwarden clients (desktop, mobile, browser extensions, and CLI) connect to Vaultwarden, since it implements the Bitwarden API. Point the client's server URL at your DOMAIN.

Do I need an external database?

No. Vaultwarden uses SQLite stored in the /data volume. There is no separate database container.

How do I stop other people from registering?

Set SIGNUPS_ALLOWED=false after creating your account. Add users later with Vaultwarden's invitation feature.

Why must DOMAIN be exact?

WebAuthn and two-factor authentication are tied to the exact origin, and attachment, Send, and email links are built from DOMAIN. A wrong value breaks those features.

Where is my data stored?

In the vw-data volume at /data: the SQLite database, attachments, RSA keys, and configuration.

Pull it, or let us run it.

The same image runs Vaultwarden on our managed servers, updates and monitoring included.