{# docker/swarm.html — Swarm topology: services, replica health, nodes, placement. Services in trouble come first (crash loop, down, short), with since-times; nodes that are down or not taking work come first. #} {% extends "base.html" %} {% from "_macros.html" import crumbs %} {% block title %}Swarm — Docker — Steward{% endblock %} {% block breadcrumb %}{{ crumbs([("Docker", "/plugins/docker/"), ("Swarm", "")]) }}{% endblock %} {% block content %}

Swarm

{% if swarms %} {% for g in swarms %}
Swarm reported by {{ g.managers | length }} manager{{ 's' if g.managers | length != 1 }} · {{ g.managers | join(", ") }}
{# ── Services ─────────────────────────────────────────────────────────── #}
{% for s in g.services %} {% else %} {% endfor %}
ServiceModeReplicasImagePlacementTask failures
{{ s.name }} {{ s.mode }} {{ s.running }}/{{ s.desired }} {% if s.state != 'healthy' and s.trouble_since %}
since {{ s.trouble_since|ago }}
{% endif %}
{{ s.image or "—" }} {% for p in s.placement %}{{ p.node }} ({{ p.running }}){% if not loop.last %}, {% endif %}{% else %}—{% endfor %} {% include "docker/_swarm_failures.html" %} {%- if not s.tasks_known %}— {%- elif not (s.crash_looping or s.failures_24h or (s.last_error and s.state != 'healthy')) %}none in 24h{% endif %}
No services in this swarm.
{# ── Nodes ────────────────────────────────────────────────────────────── #}
{% for n in g.nodes %} {% else %} {% endfor %}
NodeRoleAvailabilityStatus
{{ n.hostname or n.node_id }} {% if n.leader %}leader{% endif %} {{ n.role }} {{ n.availability }} {{ n.status }}
No nodes reported.
{% endfor %} {% else %}
No Swarm topology reported. A Steward host agent running on a Swarm manager reports services, nodes, and task placement here — workers and non-swarm hosts contribute only their local containers.
{% endif %} {% endblock %}