Container labels
Reference of every kowan.* Docker label: configure auto-updates, scan gates, alerts, schedules and backups from a Compose file, and read the labels Kowan sets.
Kowan reads a few kowan.* labels from your containers, so you can configure updates, alerts, schedules and backups in a Compose file or a docker run command, without touching the UI. It also sets labels of its own on the containers and volumes it creates. This page lists both.
Labels you set
Put them on a service in a Compose file, or pass them with docker run --label. Kowan reads them from the running container, so recreate the container after changing a label.
services:
web:
image: nginx:1.27
labels:
kowan.update: apply
kowan.update.window: "02:00-05:00 sat,sun"
kowan.update.min-age: 2d
kowan.scan.block: critical
worker:
image: ghcr.io/acme/worker:3.2
labels:
kowan.schedule.stop: "0 22 * * 1-5"
kowan.schedule.start: "0 8 * * 1-5"
kowan.schedule.timezone: Europe/Rome
kowan.backup: "true"
debug-tools:
image: nicolaka/netshoot
labels:
kowan.notify: "off"
Quote values that YAML would otherwise read as a boolean or a number, such as "off" and "true".
Updates and alerts
| Label | Values | Default | Effect |
|---|---|---|---|
kowan.update |
off, notify, pull, apply |
off |
The auto-update mode of this container. See Update modes. |
kowan.update.window |
A maintenance window | Any time | When apply may update the container. |
kowan.update.min-age |
A duration: 2d, 36h, 1d12h, 90m, 1w. A bare number means days. |
None | Apply a new image only once it is at least this old. |
kowan.scan.block |
never, critical, high, worse |
The global default (never) |
The vulnerability gate for updates. See Scan gate. |
kowan.notify |
off (also false, 0, no, none, disabled) |
On | No monitoring alerts and no auto-update alerts for this container. Its history is still recorded. |
A label wins over the policy set in the UI or the API, field by field: label, then stored policy, then global default. In the UI, a field set by a label shows a label badge and is read-only.
An invalid value is ignored and reported on the container's auto-update panel. An invalid kowan.update falls back to off, never to a more aggressive mode stored in the UI.
The containers of a deployment that has its own auto-update policy follow that policy, unless the container sets kowan.update itself.
Update modes
off- Nothing happens on its own. The Update badge and button keep working.
notify- When the registry has a newer image for the container's tag, Kowan raises an alert (the bell and your notification channels) once per new image.
pull- Kowan pulls the new image in advance, once per new image, and does not switch to it.
apply- Shown as Auto in the UI. Inside the window, and once the image is old enough, Kowan pulls it, runs the scan gate, recreates the container with the same configuration, checks that it stays healthy, and rolls back automatically if it does not. See Image updates.
Maintenance windows
Windows use the Kowan server's local time.
| Value | Open |
|---|---|
02:00-05:00 |
Every day from 02:00 to 05:00 |
02:00-05:00 sat,sun |
Weekends only. Tokens can come in any order; mon-fri, weekdays and weekends also work. |
mon-fri 22:00-06:00 |
Overnight. The night belongs to the day it starts. |
cron 0 3 * * 6 2h |
From each cron match, for 2 hours (default 1 hour, at most 24 hours) |
0 3 * * 6 or @daily 3h |
The same without the cron keyword; macros such as @daily work |
Scan gate
| Value | Blocks an update when the new image has |
|---|---|
never |
Never blocks |
critical |
Any critical vulnerability |
high |
Any critical or high vulnerability |
worse |
More critical, or more high, vulnerabilities than the image it replaces |
When the new image cannot be scanned, every value except never blocks the update.
Schedules
| Label | Values | Effect |
|---|---|---|
kowan.schedule.start |
A cron expression (5 fields, or a macro such as @daily) |
Start the container at these times. |
kowan.schedule.stop |
A cron expression | Stop the container at these times. |
kowan.schedule.restart |
A cron expression | Restart the container at these times. |
kowan.schedule.timezone |
An IANA time zone, such as Europe/Rome |
The time zone of the three labels above. Default: the server's local time. |
Kowan looks for these labels on every host every 5 minutes. They appear on the Schedules page as read-only schedules. An invalid cron expression or time zone shows the schedule with its error, and it never runs. A schedule you create in Kowan for the same host, container and action overrides the label, even when it is disabled: disabling it is how you silence a label without touching the container. See Schedules.
Runbooks
| Label | Values | Effect |
|---|---|---|
kowan.runbook.<name>.command |
A shell command | Declares the runbook <name> on this service (required). |
kowan.runbook.<name>.title, .description |
Text | How it is shown. |
kowan.runbook.<name>.mode |
exec (default) or run |
In a running container, or in a throwaway copy of the service. |
kowan.runbook.<name>.replicas |
one (default) or all |
On one replica or on each, in turn. |
kowan.runbook.<name>.confirm |
true |
Asks for confirmation before running. |
kowan.runbook.<name>.params |
NAME, OTHER=default |
Parameters, read by the command as $NAME. |
kowan.runbook.<name>.timeout |
Seconds | Default 600. |
They appear in the workload's Runbooks tab, read-only. See Runbooks.
Crash snapshots and group schedules
| Label | Values | Effect |
|---|---|---|
kowan.snapshot |
"off" |
No crash snapshot for this container. |
kowan.schedule.group |
"off" |
A host group schedule leaves this container alone. |
Backups
| Label | Values | Effect |
|---|---|---|
kowan.backup |
true (also 1, yes, on) |
Includes the volume, or the volumes mounted by the container, in every backup job that picks volumes by label. |
Set it on a container or directly on a volume. The volumes are resolved again at each run. See Volume backups.
Labels Kowan sets
Kowan writes these labels on what it creates, and uses them to find its own resources. Do not set or change them by hand.
| Label | Set on | Meaning |
|---|---|---|
kowan.managed |
Containers of container deployments | true: created by a Kowan deployment. |
kowan.deployment.id |
Containers of container deployments | The ID of the deployment that owns the container. |
kowan.deployment.name |
Containers of container deployments | The name of that deployment. |
kowan.exposure.domain |
Containers published on Exposure | The domain. |
kowan.exposure.proxy |
Published containers | The proxy that routes the domain. |
kowan.exposure.router |
Published containers | The Traefik router Kowan added. |
kowan.exposure.network |
Published containers | The proxy network Kowan connected the container to. |
kowan.exposure.keys |
Published containers | The exact labels Kowan added, so Unexpose removes only those and keeps the ones you wrote. |
kowan.exposure.role |
The Traefik container Kowan deploys | proxy. |
kowan.registry.role |
A registry Kowan deployed | registry on its container, config on the volume holding its password file. |
kowan.support |
Kowan's helper containers | true on vulnerability scan containers, volume-browse on the helper that browses a volume. Containers with true are skipped by auto-update. |
kowan.scan |
Vulnerability scan containers | trivy. |
kowan.volbackup.helper |
Volume backup helper containers | Marks a helper that runs a backup task. |
kowan.role |
Helper containers that update the Kowan server or an agent | For example server-updater or agent-updater. |
kowan.update.id |
The same update helpers | The update they belong to. |
kowan.restored-from |
Volumes restored from a backup | The first 16 characters of the snapshot ID. |
Compose deployments are recognized by their Compose project name (the com.docker.compose.project label), not by kowan.deployment.id. See Importing stacks.
Containers labeled kowan.support=true, kowan.role or kowan.volbackup.helper, like the Kowan server and agents themselves, are hidden from Workloads, the dashboard, Logs and search unless an admin turns on Kowan's own containers in Settings.
Kowan also reads one label it never sets: kowan.component=agent helps it find a host's agent container when it updates the agent, if that container has neither the usual name nor the official agent image.