This page introduces Zyraβs official container images, when to use each, and practical usage examples.
Images at a Glanceο
ghcr.io/noaa-gsl/zyra (CLI)
General-purpose CLI image; does not auto-start anything.
Includes
ffmpeg
; includeswgrib2
by default (built from source).ENTRYPOINT:
zyra
Healthcheck:
zyra --version
Best for: ad-hoc local runs, CI jobs, invoking the API process explicitly.
ghcr.io/noaa-gsl/zyra-scheduler (Watcher)
Long-running scheduler that watches a workflows directory and executes them.
Includes
ffmpeg
;wgrib2
is optional (not included by default).ENTRYPOINT:
zyra run /workflows --watch
Healthcheck:
zyra --version
Best for: daemonized workloads in Docker/Kubernetes.
Tags
vX.Y.Z
(matches the GitHub release tag)latest
(only for non-prerelease tags)sha-β¦
(content-addressed)
Which Image Should I Use?ο
Need a general CLI to run one-off commands or CI? Use
zyra
.Need a long-running process watching workflow YAMLs? Use
zyra-scheduler
.Need to run the HTTP API? Use
zyra
and start the API explicitly (examples below).
Common Volumes and Environmentο
Volumes
/workflows
: mount your workflow YAMLs here (read-only is recommended for scheduler)./data
: outputs, logs, and artifacts (also exposed viaDATA_DIR=/data
).
Common envs
DATA_DIR=/data
(default inside the images)LOG_LEVEL=info
(override as needed)TZ=UTC
(optional)
Quick Startο
CLI (help and one-off)
# Show help
docker run --rm ghcr.io/noaa-gsl/zyra:latest --help
# Run a visualize command
mkdir -p data
docker run --rm \
-v "$(pwd)/data:/data" \
ghcr.io/noaa-gsl/zyra:latest visualize static --help
Scheduler (watch a workflows directory)
mkdir -p workflows data
docker run -d \
--name zyra-scheduler \
-v "$(pwd)/workflows:/workflows:ro" \
-v "$(pwd)/data:/data" \
-e LOG_LEVEL=info \
ghcr.io/noaa-gsl/zyra-scheduler:latest
API (explicitly run the server from the CLI image)
# Bind to all interfaces, require an API key
mkdir -p data
docker run --rm \
-p 8000:8000 \
-e ZYRA_API_KEY=change-me \
-v "$(pwd)/data:/data" \
ghcr.io/noaa-gsl/zyra:latest api serve --host 0.0.0.0 --port 8000
Build-time Optionsο
Both images accept these build args for customization (when building your own):
ZYRA_VERSION
(defaultlatest
): pin to a specific Zyra PyPI version.ZYRA_EXTRAS
(default varies): install pip extras, e.g.connectors,processing,visualization
.WITH_WGRIB2
:CLI image default:
source
(includeswgrib2
built from source).Scheduler default:
none
(omitwgrib2
to keep the image lean).Supported values:
source
(build from source),apt
(install from Debian),none
(exclude).
WGRIB2_URL
andWGRIB2_SHA256
(whenWITH_WGRIB2=source
): tarball URL and optional checksum verification.WITH_FFMPEG
(scheduler only; defaulttrue
): includeffmpeg
.
Examples
# CLI image with default extras and source-built wgrib2
docker build -f docker/zyra/Dockerfile \
--build-arg ZYRA_VERSION=latest \
--build-arg WITH_WGRIB2=source \
-t ghcr.io/noaa-gsl/zyra:custom .
# Scheduler image with wgrib2 omitted (default)
docker build -f docker/zyra-scheduler/Dockerfile \
--build-arg ZYRA_VERSION=latest \
--build-arg WITH_WGRIB2=none \
-t ghcr.io/noaa-gsl/zyra-scheduler:custom .
# Scheduler with source-built wgrib2
docker build -f docker/zyra-scheduler/Dockerfile \
--build-arg WITH_WGRIB2=source \
--build-arg WGRIB2_URL=https://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz \
--build-arg WGRIB2_SHA256=<sha256sum> \
-t ghcr.io/noaa-gsl/zyra-scheduler:wgrib2 .
docker-compose Examplesο
CLI image
# docker/zyra/docker-compose.yml
services:
zyra:
image: ghcr.io/noaa-gsl/zyra:latest
command: ["--help"]
volumes:
- ../../data:/data
healthcheck:
test: ["CMD", "zyra", "--version"]
interval: 30s
timeout: 5s
retries: 3
Scheduler image
# docker/zyra-scheduler/docker-compose.yml
services:
zyra-scheduler:
image: ghcr.io/noaa-gsl/zyra-scheduler:latest
volumes:
- ../../workflows:/workflows:ro
- ../../data:/data
environment:
LOG_LEVEL: info
healthcheck:
test: ["CMD", "zyra", "--version"]
interval: 30s
timeout: 5s
retries: 3
Troubleshootingο
Permissions: images run as a non-root user. If you see write errors on bind mounts, use
--user $(id -u):$(id -g)
or setuser:
in compose.wgrib2 not found: the scheduler image excludes
wgrib2
by default; build withWITH_WGRIB2=source|apt
if needed.API 401: set
ZYRA_API_KEY
and include it via theX-API-Key
header (configurable withAPI_KEY_HEADER
).Large outputs: mount a persistent volume at
/data
and setDATA_DIR=/data
(default inside images).