From 658e41cfba72635e2f4597ca48ff16f48ff03ed1 Mon Sep 17 00:00:00 2001 From: kodi Date: Wed, 25 Feb 2026 14:10:49 +0100 Subject: [PATCH] feat(dashboard): add cached cpu/mem stats fields to containers-dashboard --- control/app.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ st.txt | 4 --- 2 files changed, 94 insertions(+), 4 deletions(-) delete mode 100644 st.txt diff --git a/control/app.py b/control/app.py index 13130a7..8a86a7c 100644 --- a/control/app.py +++ b/control/app.py @@ -17,6 +17,85 @@ PODMAN_API_BASE = "http+unix://%2Frun%2Fuser%2F1000%2Fpodman%2Fpodman.sock/v5.4. BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ALLOWLIST_FILE = os.getenv("ALLOWLIST_FILE", os.path.join(BASE_DIR, "allowed_units.txt")) WORKLOADS_DIR = "/app/workloads" + +# --- STATS CACHE (contract-neutral; in-memory) --- +# Poll Podman stats centrally and expose as optional dashboard fields. +_STATS_CACHE_BY_NAME = {} # name -> {"cpu": float|None, "mem_usage": float|None, "mem_perc": float|None} +_STATS_CACHE_TS = None +_STATS_POLLER_TASK = None + +def _norm_container_name(name) -> str: + try: + return str(name or "").lstrip("/") + except Exception: + return "" + +def _parse_stats_interval_seconds() -> float: + raw = os.getenv("STATS_INTERVAL_SECONDS", "1.0") + try: + v = float(raw) + except Exception: + v = 1.0 + if v <= 0: + v = 1.0 + if v < 0.5: + v = 0.5 + if v > 30: + v = 30 + return v + +async def _stats_poller_loop(): + global _STATS_CACHE_BY_NAME, _STATS_CACHE_TS + + interval = _parse_stats_interval_seconds() + stats_url = f"{PODMAN_API_BASE}/libpod/containers/stats?all=true&stream=false" + + def _to_float(x): + try: + return float(x) + except Exception: + return None + + while True: + try: + data = SESSION.get(stats_url, timeout=5).json() + stats_list = data.get("Stats") if isinstance(data, dict) else None + if not isinstance(stats_list, list): + stats_list = [] + + new_cache = {} + for st in stats_list: + if not isinstance(st, dict): + continue + key = _norm_container_name(st.get("Name")) + if not key: + continue + cpu_val = st.get("CPUPerc") + if cpu_val is None: + cpu_val = st.get("CPU") + if cpu_val is None: + cpu_val = st.get("AvgCPU") + new_cache[key] = { + "cpu": _to_float(cpu_val), + "mem_usage": _to_float(st.get("MemUsage")), + "mem_perc": _to_float(st.get("MemPerc")), + } + + _STATS_CACHE_BY_NAME = new_cache + _STATS_CACHE_TS = int(__import__("time").time()) + except Exception: + # Keep last good cache; try again next tick. + pass + + await asyncio.sleep(interval) + +@app.on_event("startup") +async def _startup_stats_poller(): + global _STATS_POLLER_TASK + if _STATS_POLLER_TASK and not _STATS_POLLER_TASK.done(): + return + _STATS_POLLER_TASK = asyncio.create_task(_stats_poller_loop()) + # --- ROUTERS --- # Images API lives in a dedicated module to keep this file from growing further. app.include_router(init_images_router(SESSION, PODMAN_API_BASE)) @@ -384,6 +463,9 @@ def _make_defined_container_dashboard_row(name: str, relpath: str): "_dashboard_source": "systemd", "_dashboard_unit": f"{name}.service", "_dashboard_def_path": relpath, + "_dashboard_cpu": None, + "_dashboard_mem_usage": None, + "_dashboard_mem_perc": None, } @@ -507,6 +589,8 @@ def containers_dashboard(): # Cache zodat we niet voor elke container opnieuw systemctl doen unit_active_cache = {} + stats_by_name = _STATS_CACHE_BY_NAME + def _unit_is_active(unit): if not unit: return False @@ -528,6 +612,16 @@ def containers_dashboard(): # Normaliseer naam: Podman kan "/name" geven rname = ((c.get("Names") or ["?"])[0] or "").lstrip("/") + # Optional live stats (always present; null on miss) + c["_dashboard_cpu"] = None + c["_dashboard_mem_usage"] = None + c["_dashboard_mem_perc"] = None + st = stats_by_name.get(rname) + if isinstance(st, dict): + c["_dashboard_cpu"] = st.get("cpu") + c["_dashboard_mem_usage"] = st.get("mem_usage") + c["_dashboard_mem_perc"] = st.get("mem_perc") + # 1) Managed: systemd als er een .container definitie bestaat if rname in defined: c["_dashboard_source"] = "systemd" diff --git a/st.txt b/st.txt deleted file mode 100644 index 11cf755..0000000 --- a/st.txt +++ /dev/null @@ -1,4 +0,0 @@ -kodi@kodidebian:~/.config/podman-mvp$ curl -fsS http://127.0.0.1:8081/api/pods-dashboard | head -[{"Name":"mvp-pod","Status":"Running","Containers":["5718096812b9-infra","mvp-webui","mvp-backend"],"Unit":"mvp-pod.service","Source":"podman"},{"Name":"podmediaserver","Status":"Running","Containers":["01a7e1679c49-infra","podmediaserver-vpn-gateway","podmediaserver-flaresolverr","podmediaserver-jackett","podmediaserver-qbittorrent"],"Unit":"mediaserver.service","Source":"podman"}]kodi@kodidebian:~/.config/podman-mvp$ curl -fsS http://127.0.0.1:8081/api/containers-dashboard | head curl -fsS http://127.0.0.1:8081/api/containers-dashboard | head -[{"AutoRemove":false,"Command":null,"Created":"2026-02-16T08:03:22.712258827+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":1771239786,"ExitCode":0,"ExposedPorts":null,"Id":"1bed73604cbc9075edfada1cc6c053a307929a1b58d09763627ccc38095a9c77","Image":"localhost/podman-pause:5.4.2-1766335321","ImageID":"dfd874f5c4086c63645acc7985de67de4ddd2ea18ca921dc0b52a49b10fdcccd","IsInfra":true,"Labels":{"io.buildah.version":"1.39.3"},"Mounts":[],"Names":["5718096812b9-infra"],"Namespaces":{},"Networks":[],"Pid":2537,"Pod":"5718096812b9ed6d4f19c9bd44d691ec8bd634f6af81b6574eb56c3a1811898d","PodName":"mvp-pod","Ports":[{"host_ip":"","container_port":8000,"host_port":8080,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":8081,"host_port":8081,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771239953,"State":"running","Status":"","_dashboard_published_ports":["8080:8000/tcp","8081:8081/tcp"],"_dashboard_source":"podman"},{"AutoRemove":false,"Command":["httpd-foreground"],"Created":"2026-02-16T08:06:18.590667394+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":1771872671,"ExitCode":0,"ExposedPorts":{"80":["tcp"]},"Id":"5b2987b7dfe7f93609cc8b3c5ff9f98b6bc68669eb4bc233ee6f01cc7bf1b524","Image":"docker.io/library/httpd:2.4","ImageID":"d2825031e94c68c5437ae2f479a1e2e1b2e0a26990c506e17deee19590546735","IsInfra":false,"Labels":null,"Mounts":["/usr/local/apache2/htdocs","/usr/local/apache2/conf/httpd.conf"],"Names":["mvp-webui"],"Namespaces":{},"Networks":[],"Pid":1601718,"Pod":"5718096812b9ed6d4f19c9bd44d691ec8bd634f6af81b6574eb56c3a1811898d","PodName":"mvp-pod","Ports":[{"host_ip":"","container_port":8000,"host_port":8080,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":8081,"host_port":8081,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771872671,"State":"running","Status":"","_dashboard_published_ports":["8080:8000/tcp","8081:8081/tcp"],"_dashboard_source":"podman"},{"AutoRemove":true,"Command":["postgres"],"Created":"2026-02-16T15:40:48.196527585+01:00","CreatedAt":"","CIDFile":"/run/user/1000/postgres-db.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"5432":["tcp"]},"Id":"3bcb2930996214a51f757e8f01faa056bbd58f83e790169e57e212e19e12ad81","Image":"docker.io/library/postgres:16","ImageID":"b8c80b87c813a2ee26748ce49686844942f297bcc19b6cca3d49cd2fe0a87808","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"postgres-db.service"},"Mounts":["/docker-entrypoint-initdb.d","/var/lib/postgresql/data"],"Names":["postgres-db"],"Namespaces":{},"Networks":["pgnet"],"Pid":30257,"Pod":"","PodName":"","Ports":[{"host_ip":"127.0.0.1","container_port":5432,"host_port":5432,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771252848,"State":"running","Status":"","_dashboard_published_ports":["127.0.0.1:5432:5432/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"postgres-db.service","_dashboard_def_path":"systemd/postgresqlserver/postgres-db.container"},{"AutoRemove":true,"Command":null,"Created":"2026-02-16T15:42:01.822664418+01:00","CreatedAt":"","CIDFile":"/run/user/1000/n8n.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"5678":["tcp"]},"Id":"7c8c8e76a2a2b0961414dba19943b910735af2fa1e3495c98feed475ec2eb254","Image":"docker.n8n.io/n8nio/n8n:latest","ImageID":"e78f4103dee6428d15be5c04659035953306d86dc6d5710d1aa4f62a97caff3a","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"n8n.service","com.docker.dhi.chain-id":"sha256:ee90d364f250e6b715b0b7b88e67b19a76c7adabad9e253bad24ed1ed473b61f","com.docker.dhi.compliance":"cis","com.docker.dhi.created":"2026-01-23T15:43:22Z","com.docker.dhi.date.end-of-life":"2027-04-30","com.docker.dhi.date.release":"2024-04-24","com.docker.dhi.definition":"image/node/alpine-3.22/22-dev","com.docker.dhi.distro":"alpine-3.22","com.docker.dhi.flavor":"","com.docker.dhi.name":"dhi/node","com.docker.dhi.package-manager":"apk","com.docker.dhi.shell":"busybox","com.docker.dhi.title":"Node.js 22.x (dev)","com.docker.dhi.url":"https://dhi.io/catalog/node","com.docker.dhi.variant":"dev","com.docker.dhi.version":"22.22.0-alpine3.22-dev","org.opencontainers.image.description":"Workflow Automation Tool","org.opencontainers.image.source":"https://github.com/n8n-io/n8n","org.opencontainers.image.title":"n8n","org.opencontainers.image.url":"https://n8n.io","org.opencontainers.image.version":"2.7.5"},"Mounts":["/home/node/.n8n"],"Names":["n8n"],"Namespaces":{},"Networks":["pgnet","playwright"],"Pid":30499,"Pod":"","PodName":"","Ports":[{"host_ip":"","container_port":5678,"host_port":5678,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771252921,"State":"running","Status":"","_dashboard_published_ports":["5678:5678/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"n8n.service","_dashboard_def_path":"systemd/n8n/n8n.container"},{"AutoRemove":true,"Command":["/usr/bin/s6-svscan","/etc/s6"],"Created":"2026-02-18T07:46:05.670045977+01:00","CreatedAt":"","CIDFile":"/run/user/1000/gitea.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"22":["tcp"],"3000":["tcp"]},"Id":"3cd843d1973d3516aa1c904194074a1539aa58abd365f13377c9dd8d3f5dc4d2","Image":"docker.io/gitea/gitea:latest","ImageID":"4c697a48a247ebf96c658dd1c90841075995201856d1f324502a8de392994621","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"gitea.service","io.containers.autoupdate":"registry","maintainer":"maintainers@gitea.io","org.opencontainers.image.created":"2026-01-22T01:03:39.624Z","org.opencontainers.image.description":"Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"369830bada2fd8826a5135cb2fc66660a9bef708","org.opencontainers.image.source":"https://github.com/go-gitea/gitea","org.opencontainers.image.title":"gitea","org.opencontainers.image.url":"https://github.com/go-gitea/gitea","org.opencontainers.image.version":"1.25.4"},"Mounts":["/data"],"Names":["gitea"],"Namespaces":{},"Networks":[],"Pid":173313,"Pod":"","PodName":"","Ports":[{"host_ip":"","container_port":22,"host_port":2222,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":3000,"host_port":9098,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771397165,"State":"running","Status":"","_dashboard_published_ports":["2222:22/tcp","9098:3000/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"gitea.service","_dashboard_def_path":"systemd/gitea/gitea.container"},{"AutoRemove":true,"Command":null,"Created":"2026-02-18T19:32:17.320283588+01:00","CreatedAt":"","CIDFile":"/run/user/1000/sonarr.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"8989":["tcp"]},"Id":"e71096acfec3a44061db068dd9e09acb64bbc3cc46226d435e231c7b9d58d816","Image":"lscr.io/linuxserver/sonarr:latest","ImageID":"8a7ac3e8cd085edf70cd87651f51570412028a857e18f1eda08dc05f226c391e","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"sonarr.service","build_version":"Linuxserver.io version:- 4.0.16.2944-ls303 Build-date:- 2026-02-13T23:56:17+00:00","io.containers.autoupdate":"registry","maintainer":"thespad","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-13T23:56:17+00:00","org.opencontainers.image.description":"[Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. ","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-sonarr","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"e3d276543a0d64e7c98cfb365c8ba67d79c6e07c","org.opencontainers.image.revision":"e3d276543a0d64e7c98cfb365c8ba67d79c6e07c","org.opencontainers.image.source":"https://github.com/linuxserver/docker-sonarr","org.opencontainers.image.title":"Sonarr","org.opencontainers.image.url":"https://github.com/linuxserver/docker-sonarr/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"4.0.16.2944-ls303"},"Mounts":["/config","/Volumes/8TB","/Volumes/8TB_RAID1"],"Names":["sonarr"],"Namespaces":{},"Networks":[],"Pid":294976,"Pod":"","PodName":"","Ports":[{"host_ip":"","container_port":8989,"host_port":8989,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771439537,"State":"running","Status":"","_dashboard_published_ports":["8989:8989/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"sonarr.service","_dashboard_def_path":"systemd/sonarr/sonarr.container"},{"AutoRemove":false,"Command":["uvicorn","app:app","--host","0.0.0.0","--port","8000"],"Created":"2026-02-22T11:37:03.118839878+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":null,"Id":"df276057ec0c689cd88d04a684cf187bc452740c89168e9368eb3681f617b0e2","Image":"localhost/mvp-control:latest","ImageID":"814b7994e00f4fa572a175a4e4cbdd3f63da8866f15b14f35237eaa3b49e0242","IsInfra":false,"Labels":{"io.buildah.version":"1.39.3"},"Mounts":["/run/user/1000/podman/podman.sock","/app/workloads","/run/user/1000"],"Names":["mvp-backend"],"Namespaces":{},"Networks":[],"Pid":1470363,"Pod":"5718096812b9ed6d4f19c9bd44d691ec8bd634f6af81b6574eb56c3a1811898d","PodName":"mvp-pod","Ports":[{"host_ip":"","container_port":8000,"host_port":8080,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":8081,"host_port":8081,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771756632,"State":"running","Status":"","_dashboard_published_ports":["8080:8000/tcp","8081:8081/tcp"],"_dashboard_source":"podman"},{"AutoRemove":true,"Command":null,"Created":"2026-02-22T14:25:34.154908936+01:00","CreatedAt":"","CIDFile":"/run/user/1000/dozzle.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"8080":["tcp"]},"Id":"91e510485499ec261f56d780a09616b5c383e084288ab1fb775cde1ed49b22e5","Image":"docker.io/amir20/dozzle:latest","ImageID":"575e9f201aed88bf0230c1bbc2d19947aee41995abcaf16338f1cb15a6f27130","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"dozzle.service","org.opencontainers.image.created":"2026-02-14T18:41:47.130Z","org.opencontainers.image.description":"Realtime log viewer for containers. Supports Docker, Swarm and K8s.","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"00132ef1cf20f20df1383819249b1fdb98e3f09c","org.opencontainers.image.source":"https://github.com/amir20/dozzle","org.opencontainers.image.title":"dozzle","org.opencontainers.image.url":"https://github.com/amir20/dozzle","org.opencontainers.image.version":"v10.0.2"},"Mounts":["/var/run/docker.sock"],"Names":["dozzle"],"Namespaces":{},"Networks":[],"Pid":1482067,"Pod":"","PodName":"","Ports":[{"host_ip":"","container_port":8080,"host_port":9999,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771766734,"State":"running","Status":"","_dashboard_published_ports":["9999:8080/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"dozzle.service","_dashboard_def_path":"systemd/dozzle/dozzle.container"},{"AutoRemove":true,"Command":["/entrypoint.sh"],"Created":"2026-02-24T13:35:01.902176289+01:00","CreatedAt":"","CIDFile":"/run/user/1000/playwright.cid","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":null,"Id":"04980b50774c31e4e41066f95c577b9f629af43a9627d0ded49e6954da80c2e2","Image":"localhost/playwright:latest","ImageID":"fe83936becff261f98edf47e200d6a10d06f33ce0f4e32b35a8c8c42a2fbf9ad","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"playwright.service","io.buildah.version":"1.39.3","org.opencontainers.image.ref.name":"ubuntu","org.opencontainers.image.version":"24.04"},"Mounts":["/app"],"Names":["playwright"],"Namespaces":{},"Networks":["playwright"],"Pid":1702408,"Pod":"","PodName":"","Ports":[{"host_ip":"","container_port":5901,"host_port":5901,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771936502,"State":"running","Status":"","_dashboard_published_ports":["5901:5901/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"playwright.service","_dashboard_def_path":"systemd/playwright/playwright.container"},{"AutoRemove":false,"Command":null,"Created":"2026-02-24T14:07:41.349884789+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":null,"Id":"aa9082a8065ec51d822114252c5d1b04db30abcee554e5551848e95525ba9cbd","Image":"localhost/podman-pause:5.4.2-1766335321","ImageID":"dfd874f5c4086c63645acc7985de67de4ddd2ea18ca921dc0b52a49b10fdcccd","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service"},"Mounts":[],"Names":["fed4a10cecfe-service"],"Namespaces":{},"Networks":[],"Pid":1709460,"Pod":"","PodName":"","Ports":null,"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":[],"_dashboard_source":"podman"},{"AutoRemove":false,"Command":null,"Created":"2026-02-24T14:07:41.389953795+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":null,"Id":"f281c8a5c221f287a3a0e825203559d1c88599178657ec943449b84ff88e617f","Image":"localhost/podman-pause:5.4.2-1766335321","ImageID":"dfd874f5c4086c63645acc7985de67de4ddd2ea18ca921dc0b52a49b10fdcccd","IsInfra":true,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service","io.buildah.version":"1.39.3"},"Mounts":[],"Names":["01a7e1679c49-infra"],"Namespaces":{},"Networks":["mediaserver"],"Pid":1709468,"Pod":"01a7e1679c49c5da7b983a0499be0180e05c17a4b41256ec54eac1d3c6e76cbb","PodName":"podmediaserver","Ports":[{"host_ip":"","container_port":9092,"host_port":9092,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":9117,"host_port":9117,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":["9092:9092/tcp","9117:9117/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"mediaserver.service"},{"AutoRemove":false,"Command":null,"Created":"2026-02-24T14:07:44.323862009+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"8000":["tcp"],"8388":["udp","tcp"],"8888":["tcp"]},"Id":"dfe1ddbff17af9664727893fa37762255324198fbc4c0cc42c75b3d0482a4439","Image":"ghcr.io/qdm12/gluetun:latest","ImageID":"44cd27a465822da9f2a51ed805e7f8aab29b8faa151093c37133bd94735423e0","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service","org.opencontainers.image.authors":"quentin.mcgaw@gmail.com","org.opencontainers.image.created":"2026-02-24T12:42:44.611Z","org.opencontainers.image.description":"VPN client in a thin Docker container for multiple VPN providers, written in Go, and using OpenVPN or Wireguard, DNS over TLS, with a few proxy servers built-in.","org.opencontainers.image.documentation":"https://github.com/qdm12/gluetun","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"01487b5caf2b94946a5e3721d3c2c69e76ea1d8c","org.opencontainers.image.source":"https://github.com/qdm12/gluetun","org.opencontainers.image.title":"gluetun","org.opencontainers.image.url":"https://github.com/qdm12/gluetun","org.opencontainers.image.version":"latest"},"Mounts":[],"Names":["podmediaserver-vpn-gateway"],"Namespaces":{},"Networks":[],"Pid":1709639,"Pod":"01a7e1679c49c5da7b983a0499be0180e05c17a4b41256ec54eac1d3c6e76cbb","PodName":"podmediaserver","Ports":[{"host_ip":"","container_port":9092,"host_port":9092,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":9117,"host_port":9117,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":["9092:9092/tcp","9117:9117/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"mediaserver.service"},{"AutoRemove":false,"Command":["/usr/local/bin/python","-u","/app/flaresolverr.py"],"Created":"2026-02-24T14:07:46.086907347+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"8191":["tcp"],"8192":["tcp"]},"Id":"6c8f3a08cbd40251f301933731fcd48dae3b0cc360eacb5d60e03f575732093e","Image":"ghcr.io/flaresolverr/flaresolverr:latest","ImageID":"2c9df6fe79644081e5146209e936ca21f56426531a457cba1124802d7ac0da6e","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service","org.opencontainers.image.created":"2025-11-29T02:43:01.748Z","org.opencontainers.image.description":"Proxy server to bypass Cloudflare protection","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"ff65b7cc6861b64b9558dcc9b5449aada88ff48a","org.opencontainers.image.source":"https://github.com/FlareSolverr/FlareSolverr","org.opencontainers.image.title":"FlareSolverr","org.opencontainers.image.url":"https://github.com/FlareSolverr/FlareSolverr","org.opencontainers.image.version":"v3.4.6"},"Mounts":["/config"],"Names":["podmediaserver-flaresolverr"],"Namespaces":{},"Networks":[],"Pid":1709680,"Pod":"01a7e1679c49c5da7b983a0499be0180e05c17a4b41256ec54eac1d3c6e76cbb","PodName":"podmediaserver","Ports":[{"host_ip":"","container_port":9092,"host_port":9092,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":9117,"host_port":9117,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":["9092:9092/tcp","9117:9117/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"mediaserver.service"},{"AutoRemove":false,"Command":null,"Created":"2026-02-24T14:08:00.375641772+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"9117":["tcp"]},"Id":"5596ab1cfcb55353400b1b3169c953cf096b14e152393ad3affacea683779ff5","Image":"lscr.io/linuxserver/jackett:latest","ImageID":"f6f764cc2714257d20d6eca26ab38b034e20a1d7ee68b62acca0b6d622b6ab56","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service","build_version":"Linuxserver.io version:- v0.24.1193-ls322 Build-date:- 2026-02-24T06:39:10+00:00","maintainer":"thelamer","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-24T06:39:10+00:00","org.opencontainers.image.description":"[Jackett](https://github.com/Jackett/Jackett) works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-jackett","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"393764d3786fb1f5431e179c872240603d00312a","org.opencontainers.image.revision":"393764d3786fb1f5431e179c872240603d00312a","org.opencontainers.image.source":"https://github.com/linuxserver/docker-jackett","org.opencontainers.image.title":"Jackett","org.opencontainers.image.url":"https://github.com/linuxserver/docker-jackett/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"v0.24.1193-ls322"},"Mounts":["/config","/downloads"],"Names":["podmediaserver-jackett"],"Namespaces":{},"Networks":[],"Pid":1709505,"Pod":"01a7e1679c49c5da7b983a0499be0180e05c17a4b41256ec54eac1d3c6e76cbb","PodName":"podmediaserver","Ports":[{"host_ip":"","container_port":9092,"host_port":9092,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":9117,"host_port":9117,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":["9092:9092/tcp","9117:9117/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"mediaserver.service"},{"AutoRemove":false,"Command":["echo \"Waiting for VPN health server...\";\nuntil nc -z 127.0.0.1 9999; do sleep 2; done;\necho \"VPN ready, starting qbittorrent\";\nexec /init\n"],"Created":"2026-02-24T14:08:10.482564449+01:00","CreatedAt":"","CIDFile":"","Exited":false,"ExitedAt":-62135596800,"ExitCode":0,"ExposedPorts":{"6881":["tcp","udp"],"8080":["tcp"]},"Id":"24c47e54a67d82bb4eab962fd040385cb77bdacd768863209cf907ca522b0055","Image":"lscr.io/linuxserver/qbittorrent:latest","ImageID":"58acede726d085614039d6607c601016c15bc9396b2d9e63aa64f04e3d1ffcb2","IsInfra":false,"Labels":{"PODMAN_SYSTEMD_UNIT":"mediaserver.service","build_version":"Linuxserver.io version:- 5.1.4-r2-ls442 Build-date:- 2026-02-22T07:28:22+00:00","io.containers.autoupdate":"registry","maintainer":"thespad","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-22T07:28:22+00:00","org.opencontainers.image.description":"The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-qbittorrent","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"264d4fefe09bd60ea574a64132eca13df5ddeda6","org.opencontainers.image.revision":"264d4fefe09bd60ea574a64132eca13df5ddeda6","org.opencontainers.image.source":"https://github.com/linuxserver/docker-qbittorrent","org.opencontainers.image.title":"Qbittorrent","org.opencontainers.image.url":"https://github.com/linuxserver/docker-qbittorrent/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"5.1.4-r2-ls442"},"Mounts":["/config","/Volumes/8TB/Shared_Folders/Downloads"],"Names":["podmediaserver-qbittorrent"],"Namespaces":{},"Networks":[],"Pid":1709551,"Pod":"01a7e1679c49c5da7b983a0499be0180e05c17a4b41256ec54eac1d3c6e76cbb","PodName":"podmediaserver","Ports":[{"host_ip":"","container_port":9092,"host_port":9092,"range":1,"protocol":"tcp"},{"host_ip":"","container_port":9117,"host_port":9117,"range":1,"protocol":"tcp"}],"Restarts":0,"Size":null,"StartedAt":1771938493,"State":"running","Status":"","_dashboard_published_ports":["9092:9092/tcp","9117:9117/tcp"],"_dashboard_source":"systemd","_dashboard_unit":"mediaserver.service"}]kodi@kodidebian:~/.config/podman-mvp$ curl -curl -fsS http://127.0.0.1:8081/api/images | head -[{"Id":"dfd874f5c4086c63645acc7985de67de4ddd2ea18ca921dc0b52a49b10fdcccd","ParentId":"","RepoTags":["localhost/podman-pause:5.4.2-1766335321"],"RepoDigests":["localhost/podman-pause@sha256:25b673ee8de51228b2fe7e66dde72de6a4bb316ff776f97b49528176d9771184"],"Created":1771225402,"Size":1473167,"SharedSize":0,"VirtualSize":1473167,"Labels":{"io.buildah.version":"1.39.3"},"Containers":3,"Arch":"amd64","Digest":"sha256:25b673ee8de51228b2fe7e66dde72de6a4bb316ff776f97b49528176d9771184","History":["localhost/podman-pause:5.4.2-1766335321"],"IsManifestList":false,"Names":["localhost/podman-pause:5.4.2-1766335321"],"Os":"linux"},{"Id":"d2825031e94c68c5437ae2f479a1e2e1b2e0a26990c506e17deee19590546735","ParentId":"","RepoTags":["docker.io/library/httpd:2.4"],"RepoDigests":["docker.io/library/httpd@sha256:60a9de5582b60c45a649018786180bf75d57f43d6fefe799670d5acae8462799","docker.io/library/httpd@sha256:b89c19a390514d6767e8c62f29375d0577190be448f63b24f5f11d6b03f7bf18"],"Created":1770085385,"Size":120210217,"SharedSize":0,"VirtualSize":120210217,"Labels":null,"Containers":1,"Arch":"amd64","Digest":"sha256:b89c19a390514d6767e8c62f29375d0577190be448f63b24f5f11d6b03f7bf18","History":["docker.io/library/httpd:2.4"],"IsManifestList":false,"Names":["docker.io/library/httpd:2.4"],"Os":"linux"},{"Id":"2c9df6fe79644081e5146209e936ca21f56426531a457cba1124802d7ac0da6e","ParentId":"","RepoTags":["ghcr.io/flaresolverr/flaresolverr:latest"],"RepoDigests":["ghcr.io/flaresolverr/flaresolverr@sha256:524715c5b5d045ff77ae409ffa1d6c0fcf9f23a2e5e957eb44da4f2fc53e6876","ghcr.io/flaresolverr/flaresolverr@sha256:7962759d99d7e125e108e0f5e7f3cdbcd36161776d058d1d9b7153b92ef1af9e"],"Created":1764384255,"Size":690355587,"SharedSize":0,"VirtualSize":690355587,"Labels":{"org.opencontainers.image.created":"2025-11-29T02:43:01.748Z","org.opencontainers.image.description":"Proxy server to bypass Cloudflare protection","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"ff65b7cc6861b64b9558dcc9b5449aada88ff48a","org.opencontainers.image.source":"https://github.com/FlareSolverr/FlareSolverr","org.opencontainers.image.title":"FlareSolverr","org.opencontainers.image.url":"https://github.com/FlareSolverr/FlareSolverr","org.opencontainers.image.version":"v3.4.6"},"Containers":1,"Arch":"amd64","Digest":"sha256:7962759d99d7e125e108e0f5e7f3cdbcd36161776d058d1d9b7153b92ef1af9e","History":["ghcr.io/flaresolverr/flaresolverr:latest"],"IsManifestList":false,"Names":["ghcr.io/flaresolverr/flaresolverr:latest"],"Os":"linux"},{"Id":"8a7ac3e8cd085edf70cd87651f51570412028a857e18f1eda08dc05f226c391e","ParentId":"","RepoTags":["lscr.io/linuxserver/sonarr:latest"],"RepoDigests":["lscr.io/linuxserver/sonarr@sha256:37be832b78548e3f55f69c45b50e3b14d18df1b6def2a4994258217e67efb1a1","lscr.io/linuxserver/sonarr@sha256:9a4c65d24dac6f1fb5f98de73d20fc1ebf76719f7e99ceb3887f5ba8c2977093"],"Created":1771027088,"Size":208022480,"SharedSize":0,"VirtualSize":208022480,"Labels":{"build_version":"Linuxserver.io version:- 4.0.16.2944-ls303 Build-date:- 2026-02-13T23:56:17+00:00","maintainer":"thespad","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-13T23:56:17+00:00","org.opencontainers.image.description":"[Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. ","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-sonarr","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"e3d276543a0d64e7c98cfb365c8ba67d79c6e07c","org.opencontainers.image.revision":"e3d276543a0d64e7c98cfb365c8ba67d79c6e07c","org.opencontainers.image.source":"https://github.com/linuxserver/docker-sonarr","org.opencontainers.image.title":"Sonarr","org.opencontainers.image.url":"https://github.com/linuxserver/docker-sonarr/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"4.0.16.2944-ls303"},"Containers":1,"Arch":"amd64","Digest":"sha256:37be832b78548e3f55f69c45b50e3b14d18df1b6def2a4994258217e67efb1a1","History":["lscr.io/linuxserver/sonarr:latest"],"IsManifestList":false,"Names":["lscr.io/linuxserver/sonarr:latest"],"Os":"linux"},{"Id":"b8c80b87c813a2ee26748ce49686844942f297bcc19b6cca3d49cd2fe0a87808","ParentId":"","RepoTags":["docker.io/library/postgres:16"],"RepoDigests":["docker.io/library/postgres@sha256:671edd2067af03a22235546817d0367bc5c4cc834efdebed50d0f445ad9e7bed","docker.io/library/postgres@sha256:e4842c8a99ca99339e1693e6fe5fe62c7becb31991f066f989047dfb2fbf47af"],"Created":1770930287,"Size":458070507,"SharedSize":0,"VirtualSize":458070507,"Labels":null,"Containers":1,"Arch":"amd64","Digest":"sha256:e4842c8a99ca99339e1693e6fe5fe62c7becb31991f066f989047dfb2fbf47af","History":["docker.io/library/postgres:16"],"IsManifestList":false,"Names":["docker.io/library/postgres:16"],"Os":"linux"},{"Id":"e78f4103dee6428d15be5c04659035953306d86dc6d5710d1aa4f62a97caff3a","ParentId":"","RepoTags":["docker.n8n.io/n8nio/n8n:latest"],"RepoDigests":["docker.n8n.io/n8nio/n8n@sha256:6b35a08cbebe1750cf068f3990a41818a8b3a127c04185872af2f3d1ce0bb404","docker.n8n.io/n8nio/n8n@sha256:9220846479a40e3df1bc12e673cf38d33d0800afbea68b9bc90109babf594547"],"Created":1771003461,"Size":1154540677,"SharedSize":0,"VirtualSize":1154540677,"Labels":{"com.docker.dhi.chain-id":"sha256:ee90d364f250e6b715b0b7b88e67b19a76c7adabad9e253bad24ed1ed473b61f","com.docker.dhi.compliance":"cis","com.docker.dhi.created":"2026-01-23T15:43:22Z","com.docker.dhi.date.end-of-life":"2027-04-30","com.docker.dhi.date.release":"2024-04-24","com.docker.dhi.definition":"image/node/alpine-3.22/22-dev","com.docker.dhi.distro":"alpine-3.22","com.docker.dhi.flavor":"","com.docker.dhi.name":"dhi/node","com.docker.dhi.package-manager":"apk","com.docker.dhi.shell":"busybox","com.docker.dhi.title":"Node.js 22.x (dev)","com.docker.dhi.url":"https://dhi.io/catalog/node","com.docker.dhi.variant":"dev","com.docker.dhi.version":"22.22.0-alpine3.22-dev","org.opencontainers.image.description":"Workflow Automation Tool","org.opencontainers.image.source":"https://github.com/n8n-io/n8n","org.opencontainers.image.title":"n8n","org.opencontainers.image.url":"https://n8n.io","org.opencontainers.image.version":"2.7.5"},"Containers":1,"Arch":"amd64","Digest":"sha256:9220846479a40e3df1bc12e673cf38d33d0800afbea68b9bc90109babf594547","History":["docker.n8n.io/n8nio/n8n:latest"],"IsManifestList":false,"Names":["docker.n8n.io/n8nio/n8n:latest"],"Os":"linux"},{"Id":"4c697a48a247ebf96c658dd1c90841075995201856d1f324502a8de392994621","ParentId":"","RepoTags":["docker.io/gitea/gitea:latest"],"RepoDigests":["docker.io/gitea/gitea@sha256:17d18218be2dad1f8ed402a4f906989505c90ab8b66ee9befcecfb5d470133e7","docker.io/gitea/gitea@sha256:fd917399b5bbde18348d52eda18b3690d75ae1c108630c6dc3a2bf10a3e0c353"],"Created":1769044714,"Size":181726107,"SharedSize":0,"VirtualSize":181726107,"Labels":{"maintainer":"maintainers@gitea.io","org.opencontainers.image.created":"2026-01-22T01:03:39.624Z","org.opencontainers.image.description":"Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"369830bada2fd8826a5135cb2fc66660a9bef708","org.opencontainers.image.source":"https://github.com/go-gitea/gitea","org.opencontainers.image.title":"gitea","org.opencontainers.image.url":"https://github.com/go-gitea/gitea","org.opencontainers.image.version":"1.25.4"},"Containers":1,"Arch":"amd64","Digest":"sha256:17d18218be2dad1f8ed402a4f906989505c90ab8b66ee9befcecfb5d470133e7","History":["docker.io/gitea/gitea:latest"],"IsManifestList":false,"Names":["docker.io/gitea/gitea:latest"],"Os":"linux"},{"Id":"575e9f201aed88bf0230c1bbc2d19947aee41995abcaf16338f1cb15a6f27130","ParentId":"","RepoTags":["docker.io/amir20/dozzle:latest"],"RepoDigests":["docker.io/amir20/dozzle@sha256:4d39ae7e046ab0cdd4b1d67a70cf9836396b69b0fff7402b70fbc6a9bc0d122b","docker.io/amir20/dozzle@sha256:f1f82c27077f39c0a563f24e9929d36f23bdf9c1590217794a08ea49677201cf"],"Created":1771094718,"Size":57888799,"SharedSize":0,"VirtualSize":57888799,"Labels":{"org.opencontainers.image.created":"2026-02-14T18:41:47.130Z","org.opencontainers.image.description":"Realtime log viewer for containers. Supports Docker, Swarm and K8s.","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"00132ef1cf20f20df1383819249b1fdb98e3f09c","org.opencontainers.image.source":"https://github.com/amir20/dozzle","org.opencontainers.image.title":"dozzle","org.opencontainers.image.url":"https://github.com/amir20/dozzle","org.opencontainers.image.version":"v10.0.2"},"Containers":1,"Arch":"amd64","Digest":"sha256:f1f82c27077f39c0a563f24e9929d36f23bdf9c1590217794a08ea49677201cf","History":["docker.io/amir20/dozzle:latest"],"IsManifestList":false,"Names":["docker.io/amir20/dozzle:latest"],"Os":"linux"},{"Id":"814b7994e00f4fa572a175a4e4cbdd3f63da8866f15b14f35237eaa3b49e0242","ParentId":"","RepoTags":["localhost/mvp-control:latest"],"RepoDigests":["localhost/mvp-control@sha256:68b55ab501c33eaa85e69692a2b50778620c4e59a2296bdb200834fe51c68c64"],"Created":1771756608,"Size":210921984,"SharedSize":0,"VirtualSize":210921984,"Labels":{"io.buildah.version":"1.39.3"},"Containers":1,"Arch":"amd64","Digest":"sha256:68b55ab501c33eaa85e69692a2b50778620c4e59a2296bdb200834fe51c68c64","History":["localhost/mvp-control:latest"],"IsManifestList":false,"Names":["localhost/mvp-control:latest"],"Os":"linux"},{"Id":"fe83936becff261f98edf47e200d6a10d06f33ce0f4e32b35a8c8c42a2fbf9ad","ParentId":"","RepoTags":["localhost/playwright:latest"],"RepoDigests":["localhost/playwright@sha256:06528efbcb8a6af68affef95882175741114fbb407618786a2ba512bc110b03c"],"Created":1771872820,"Size":2916171987,"SharedSize":0,"VirtualSize":2916171987,"Labels":{"io.buildah.version":"1.39.3","org.opencontainers.image.ref.name":"ubuntu","org.opencontainers.image.version":"24.04"},"Containers":1,"Arch":"amd64","Digest":"sha256:06528efbcb8a6af68affef95882175741114fbb407618786a2ba512bc110b03c","History":["localhost/playwright:latest"],"IsManifestList":false,"Names":["localhost/playwright:latest"],"Os":"linux"},{"Id":"44cd27a465822da9f2a51ed805e7f8aab29b8faa151093c37133bd94735423e0","ParentId":"","RepoTags":["ghcr.io/qdm12/gluetun:latest"],"RepoDigests":["ghcr.io/qdm12/gluetun@sha256:4f62e8cfcffb43c0cddf55ef7e65b50e3a4a6deadca3a88d65f8d7f9988a30b0","ghcr.io/qdm12/gluetun@sha256:784b5f1ba64f613510669a682390a97f6403b43e9ce8be0d8ffc12e534a0d89b"],"Created":1771937135,"Size":67454396,"SharedSize":0,"VirtualSize":67454396,"Labels":{"org.opencontainers.image.authors":"quentin.mcgaw@gmail.com","org.opencontainers.image.created":"2026-02-24T12:42:44.611Z","org.opencontainers.image.description":"VPN client in a thin Docker container for multiple VPN providers, written in Go, and using OpenVPN or Wireguard, DNS over TLS, with a few proxy servers built-in.","org.opencontainers.image.documentation":"https://github.com/qdm12/gluetun","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"01487b5caf2b94946a5e3721d3c2c69e76ea1d8c","org.opencontainers.image.source":"https://github.com/qdm12/gluetun","org.opencontainers.image.title":"gluetun","org.opencontainers.image.url":"https://github.com/qdm12/gluetun","org.opencontainers.image.version":"latest"},"Containers":1,"Arch":"amd64","Digest":"sha256:784b5f1ba64f613510669a682390a97f6403b43e9ce8be0d8ffc12e534a0d89b","History":["ghcr.io/qdm12/gluetun:latest"],"IsManifestList":false,"Names":["ghcr.io/qdm12/gluetun:latest"],"Os":"linux"},{"Id":"f6f764cc2714257d20d6eca26ab38b034e20a1d7ee68b62acca0b6d622b6ab56","ParentId":"","RepoTags":["lscr.io/linuxserver/jackett:latest"],"RepoDigests":["lscr.io/linuxserver/jackett@sha256:0cc4483a72cc3dd7f67d739523ff5ee0a2d63580bfa91e560932fc77d3874bfc","lscr.io/linuxserver/jackett@sha256:f2e811e6ed87fb4953b5b3c127594ab7ce3bfe05e831631fce0c9ade120c50b5"],"Created":1771915251,"Size":189855622,"SharedSize":0,"VirtualSize":189855622,"Labels":{"build_version":"Linuxserver.io version:- v0.24.1193-ls322 Build-date:- 2026-02-24T06:39:10+00:00","maintainer":"thelamer","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-24T06:39:10+00:00","org.opencontainers.image.description":"[Jackett](https://github.com/Jackett/Jackett) works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-jackett","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"393764d3786fb1f5431e179c872240603d00312a","org.opencontainers.image.revision":"393764d3786fb1f5431e179c872240603d00312a","org.opencontainers.image.source":"https://github.com/linuxserver/docker-jackett","org.opencontainers.image.title":"Jackett","org.opencontainers.image.url":"https://github.com/linuxserver/docker-jackett/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"v0.24.1193-ls322"},"Containers":1,"Arch":"amd64","Digest":"sha256:f2e811e6ed87fb4953b5b3c127594ab7ce3bfe05e831631fce0c9ade120c50b5","History":["lscr.io/linuxserver/jackett:latest"],"IsManifestList":false,"Names":["lscr.io/linuxserver/jackett:latest"],"Os":"linux"},{"Id":"58acede726d085614039d6607c601016c15bc9396b2d9e63aa64f04e3d1ffcb2","ParentId":"","RepoTags":["lscr.io/linuxserver/qbittorrent:latest"],"RepoDigests":["lscr.io/linuxserver/qbittorrent@sha256:065792d2b11f0facff340210fc1cf13623b029a94ecdf08b02d06d922205f618","lscr.io/linuxserver/qbittorrent@sha256:95941f2d9663f841c5fa595d7b904403838dc29dbe20eb7646b02cda82eb16b7"],"Created":1771745403,"Size":201464366,"SharedSize":0,"VirtualSize":201464366,"Labels":{"build_version":"Linuxserver.io version:- 5.1.4-r2-ls442 Build-date:- 2026-02-22T07:28:22+00:00","maintainer":"thespad","org.opencontainers.image.authors":"linuxserver.io","org.opencontainers.image.created":"2026-02-22T07:28:22+00:00","org.opencontainers.image.description":"The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.","org.opencontainers.image.documentation":"https://docs.linuxserver.io/images/docker-qbittorrent","org.opencontainers.image.licenses":"GPL-3.0-only","org.opencontainers.image.ref.name":"264d4fefe09bd60ea574a64132eca13df5ddeda6","org.opencontainers.image.revision":"264d4fefe09bd60ea574a64132eca13df5ddeda6","org.opencontainers.image.source":"https://github.com/linuxserver/docker-qbittorrent","org.opencontainers.image.title":"Qbittorrent","org.opencontainers.image.url":"https://github.com/linuxserver/docker-qbittorrent/packages","org.opencontainers.image.vendor":"linuxserver.io","org.opencontainers.image.version":"5.1.4-r2-ls442"},"Containers":1,"Arch":"amd64","Digest":"sha256:065792d2b11f0facff340210fc1cf13623b029a94ecdf08b02d06d922205f618","History":["lscr.io/linuxserver/qbittorrent:latest"],"IsManifestList":false,"Names":["lscr.io/linuxserver/qbittorrent:latest"],"Os":"linux"}]kodi@kodidebian:~/.config/podman-mvp$