{# docker/disk.html — what Docker keeps on each host's disk (#5304, #5305): the hosts side by side with how much each grew, then each host's parts, its cleanup actions, and its images folded under their repository. #} {% extends "base.html" %} {% from "_macros.html" import crumbs, page_header, stat_tile, status_badge %} {% block title %}Disk — Docker — Steward{% endblock %} {% block breadcrumb %}{{ crumbs([("Docker", "/plugins/docker/"), ("Disk", "")]) }}{% endblock %} {% block content %} {% call page_header("Docker disk", "What Docker keeps on each host's disk, from docker system df, and how it has grown.") %} {% include "_time_range.html" %} {% endcall %} {% if host_groups %}

By host most space first

Loading…

{% for g in host_groups %} {% set s = g.summary %}

{{ g.host_name }} {{ g.total|bytes }} {% if g.as_of %}as of {{ g.as_of|ago }}{% endif %}

{{ stat_tile("Reclaimable", s.images_reclaimable|bytes, state="warn" if s.images_reclaimable else "ok", hint="held by images no container uses") }} {{ stat_tile("Images", s.images_size|bytes, hint=s.images_active ~ " of " ~ s.images_total ~ " in use") }} {{ stat_tile("Container files", s.containers_size|bytes, hint="written by " ~ s.containers_count ~ " containers on top of their images") }} {{ stat_tile("Volumes", s.volumes_size|bytes, hint=s.volumes_count ~ " volumes; never pruned here") }} {{ stat_tile("Build cache", s.build_cache_size|bytes, hint="left by docker build; safe to clear") }} {{ stat_tile("Stopped", g.stopped, state="dim" if not g.stopped else none, hint="containers not running") }}
{# ── Cleanup actions (admin only; audited Ansible prune run) ───────────── #} {% if session.user_role == 'admin' %}
{% if ansible_available and g.has_target %}
{{ csrf_field() }}
{{ csrf_field() }}
{{ csrf_field() }}
Each runs an audited Ansible playbook on {{ g.host_name }}; reclaimed space shows on the next agent sample. {% elif not ansible_available %} Cleanup needs the Ansible runner (currently unavailable). {% else %} Link an Ansible target to this host to enable prune actions. {% endif %}
{% endif %} {# ── Images by repository, versions folded under it (#5305) ─────────── #}

Images by repository {% if g.images_capped %}the {{ g.images_listed }} largest of {{ s.images_total }} images{% else %}{{ g.images_listed }} images{% endif %}

{% if g.repos %} {% for r in g.repos %} {% endfor %}
Repository Versions Own size Used by Reclaimable
{% if r.repo %}{{ r.repo }}{% else %}untagged{% endif %} {% for v in r.versions %} {% endfor %}
TagIDSizeSharedUsed by
{{ v.tag or "—" }} {{ (v.image_id or "")|replace("sha256:", "")|truncate(12, true, "") }} {{ v.size|bytes }} {{ v.shared|bytes }} {% if v.containers %}{{ v.containers }} container{{ "s" if v.containers != 1 }}{% else %}nothing{% endif %}
{{ r.versions|length }}{% if r.unused %} ({{ r.unused }} unused){% endif %} {{ r.own|bytes }} {% if r.containers %}{{ r.containers }} container{{ "s" if r.containers != 1 }}{% else %}nothing{% endif %} {% if r.reclaimable %}{{ r.reclaimable|bytes }}{% else %}—{% endif %}
{% else %}

No images reported.

{% endif %}
{% endfor %} {% else %}
No disk usage reported yet. The host agent reports what Docker keeps on disk, from docker system df, on hosts running Docker.
{% endif %} {% endblock %}