> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tinycloud.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker Deployment

> Run TinyCloud with Docker

Use Docker when you want the fastest path to a local or self-hosted node.

## Minimal container

```bash theme={null}
docker run -d \
  --name tinycloud \
  -p 8000:8000 \
  -p 8001:8001 \
  -e TINYCLOUD_STORAGE__DATADIR=/data \
  -e TINYCLOUD_STORAGE__DATABASE=sqlite:/data/caps.db \
  -e TINYCLOUD_STORAGE__BLOCKS__TYPE=Local \
  -e TINYCLOUD_STORAGE__BLOCKS__PATH=/data/blocks \
  -e TINYCLOUD_KEYS__SECRET="$(openssl rand -base64 32 | tr '+/' '-_' | tr -d '=')" \
  -v tinycloud-data:/data \
  ghcr.io/tinycloudlabs/tinycloud-node
```

## What to mount

| Path           | Purpose                                         |
| -------------- | ----------------------------------------------- |
| `/data`        | Persistent node data                            |
| `/data/blocks` | Local block storage when using `type = "Local"` |

## Compose

For a small deployment, keep the stack to one TinyCloud container plus the backing services you actually need. Use the database and block-storage pages for the backend-specific pieces.

## Verify it started

```bash theme={null}
curl http://localhost:8000/healthz
```

The minimal command publishes the HTTP API and metrics ports only. It does not
publish `8081`; the current node server does not start a relay listener from
the `relay.port` configuration value.

## Upgrades

Pull a new image, restart the container, and let the node apply migrations on startup.

<Note>
  The container expects the same config keys as the bare node process. Use canonical `TINYCLOUD_` env vars so the same settings work across Docker and non-Docker deployments.
</Note>
