Run Docker commands from the directory that contains docker-compose.yml.
Prefer a browser? The Admin Console runs these maintenance actions — updates, backups, restore and diagnostics — with previews and confirmations. This page is the copy/paste equivalent for shell users.
Start:
docker compose up -dStop:
docker compose downRestart:
docker compose restartLogs:
docker compose logs -fStatus:
docker compose psDiagnose:
docker compose exec ems python3 emsctl.py diagnoseDeeper diagnostics:
docker compose exec ems python3 emsctl.py diagnose --deepUse this when normal diagnostics do not explain the issue or before opening a detailed bug report.
Hardware read-only check:
docker compose exec ems python3 emsctl.py diagnose --hardwareSupport bundle:
docker compose exec ems python3 emsctl.py diagnose --support-bundleBackup:
docker compose exec ems python3 emsctl.py backup create --type config --password
docker compose exec ems python3 emsctl.py backup create --type databases --passwordBackups are stored in data/backups/ by default. Docker users see the same
folder on the host via the existing ./data:/app/data mount; no separate
backup volume is needed. Password-protected backups are recommended; without
the password, encrypted backups cannot be restored.
Unencrypted backup variant:
docker compose exec ems python3 emsctl.py backup create --type config
docker compose exec ems python3 emsctl.py backup create --type databasesConfig init:
docker compose exec ems python3 emsctl.py config initConfig upgrade:
docker compose exec ems python3 emsctl.py config upgrade --dry-run
docker compose exec ems python3 emsctl.py config upgrade --yes --backupSafe update:
docker compose exec ems python3 emsctl.py backup create --type config --password
docker compose exec ems python3 emsctl.py backup create --type databases --password
docker compose pull
docker compose up -d
docker compose exec ems python3 emsctl.py config upgrade --dry-run
docker compose exec ems python3 emsctl.py config upgrade --yes --backup
docker compose exec ems python3 emsctl.py diagnoseEnable Analytics with the installer (sh install-docker.sh --analytics). With
the local .env it writes (COMPOSE_PROFILES=with-analytics), the normal
commands above already start EMS and InfluxDB together.
Start Analytics manually without that .env:
docker compose --profile with-analytics up -dAnalytics status and schema sync:
docker compose exec ems python3 emsctl.py influx status
docker compose exec ems python3 emsctl.py influx syncThe with-analytics profile adds the bundled InfluxDB service to the normal
EMS stack. EMS-only setups never need config/influxdb.env. The host-side
python3 emsctl.py stack up is a repo/native poweruser helper and is not
needed for the Docker-first setup.
Run native commands from the repository checkout, usually with your virtual environment active.
python3 emsctl.py diagnose
python3 emsctl.py diagnose --deep
python3 emsctl.py diagnose --hardware
python3 emsctl.py diagnose --support-bundle
python3 emsctl.py backup create --type config --password
python3 emsctl.py config init
python3 emsctl.py config upgrade --dry-run
python3 emsctl.py config upgrade
python3 -B ems-solarflow-api-control.py --dry-run --no-ha --once
python3 -B ems-solarflow-api-control.py --duration 120More detail: cli.md.