dockerDocker setup

Run CrossWatch in Docker and persist state by mounting /config.

Run CrossWatch (CW) in Docker. Always mount /config to persist state.

If you use Portainer or a NAS container UI, mirror these same values.

Expose 8787 and attach a persistent volume to /config.

circle-info

We do not provide support for installing or troubleshooting container runtimes.

These pages assume Docker (or your NAS container manager) is already installed and working.

If Docker itself is broken, use your platform docs first.

The install guides are provided for reference only.

Before you run

  • Pick a Docker volume name for CW state.

    • Example: crosswatch_config

  • Decide which port to expose.

    • Default UI port: 8787

  • Set your timezone.

    • Example: TZ=Europe/Amsterdam

circle-exclamation

Create the volume (once)

Run it

Open http://localhost:8787.

Updating

Pull the latest image. Then restart the container.

Optional environment variables

You normally only need TZ.

Override these only if you know why:

  • TZ — container timezone (used for timestamps in logs and the UI).

    • Default: UTC

    • Common values:

      • UTC

      • Europe/Amsterdam

      • Europe/London

      • America/New_York

      • America/Los_Angeles

      • Asia/Singapore

      • Asia/Tokyo

      • Australia/Sydney

  • CONFIG_BASE — base path for config.json, state.json, statistics.json, etc.

    • Default: /config (leave as-is)

  • WEB_HOST — bind address for the web UI inside the container.

    • Default: 0.0.0.0

  • WEB_PORT — port for the web UI inside the container.

    • Default: 8787

  • APP_USER — username created inside the container that runs CW.

    • Default: appuser

  • APP_GROUP — group name created inside the container.

    • Default: appuser

  • APP_UID — numeric UID used for APP_USER (helps match your host user).

    • Default: 1000

  • APP_GID — numeric GID used for APP_GROUP.

    • Default: 1000

  • APP_DIR — application directory inside the container.

    • Default: /app (leave as-is)

  • RUNTIME_DIR — runtime/config directory used by the entrypoint.

    • Default: /config (leave as-is)

  • RELOAD — enable Python auto-reload for development.

    • Default: no (set to yes for dev only)

circle-info

Use an IANA timezone name (like Europe/Amsterdam), not a GMT offset.

Troubleshooting

UI does not load

  • Confirm the container is running: docker ps

  • Check logs: docker logs crosswatch --tail 200

  • /config is not accessible or writable on my NAS.

    • Align NAS file permissions with APP_UID/APP_GID and APP_USER/APP_GROUP.

  • Confirm the port mapping matches the URL you open.

    • Example: -p 8787:8787 -> http://localhost:8787

Summary

Run CW in Docker and persist data by mounting /config.

Expose the UI port (default 8787) and set TZ.

Use Docker Compose for easier updates and restarts.

Next steps

Last updated

Was this helpful?