portracker

Live, self-hosted port monitoring and discovery for your homelab

  • mostafawahied/portracker:1.3.14
  • port 6158
  • Networking
portracker screenshot 1portracker screenshot 2

Dashboard

/
http://localhost:6158/

portracker scans your host and your Docker containers and builds a live map of every port in use, so messy spreadsheets and surprise port conflicts stop happening.

Features

  • Finds ports on the host and in Docker containers by itself, and shows internal and published ports apart
  • Add other portracker servers as peers to see every server, container and VM on one dashboard
  • Built-in login with a first-run setup wizard (no OIDC or other sign-in providers yet)
  • One small container with a built-in SQLite database

How to use

  1. Open portracker from your dashboard.
  2. Follow the setup wizard and make your admin username and password.
  3. portracker starts scanning right away. There is nothing else to set up to see host and Docker ports.
  4. To watch more machines, install portracker there too and add it as a peer from the Settings gear.

Before you install

There is nothing you must set. SESSION_SECRET comes filled with a random value that keeps you signed in across restarts. The app starts in a few seconds; open http://your-zimaos-ip:6158 and follow the setup wizard. portracker gets read-only access to Docker and sees the host's processes, which is how it finds ports. If you forget your password, add RECOVERY_MODE=true in the app settings and find the recovery code in the app log. UDP scanning, TrueNAS and other settings are in the Variables tab; add them in the app settings.

The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.

In the app settings

VariableDefault valueDescription
TZ$TZYour time zone. It is filled in from your ZimaOS time zone. Leave it unless you need another.
ENABLE_AUTHtrueTurns on portracker's login screen and setup wizard. Set to false to leave the dashboard open to anyone on your network.
SESSION_SECRETchange-mePre-filled with a random value. It keeps you signed in when the app restarts. You can replace it with your own random text.

Sign-up and accounts

VariableDefault valueDescription
RECOVERY_MODEfalseSet to true if you forgot your password. After a restart, a recovery code that works for 15 minutes appears in the app log. Take it out again afterwards.

Server

VariableDefault valueDescription
CORS_ORIGIN—Browser addresses allowed to call portracker, comma-separated, like https://ports.example.com. Only needed behind a reverse proxy that changes the host name.

Scanning

VariableDefault valueDescription
INCLUDE_UDPfalseSet to true to list UDP ports too. This can add a lot of noise.
MAX_INTERNAL_PORTS_PER_CONTAINER100The most unpublished ports listed for one container. Containers with more still show their published ports.
CACHE_TIMEOUT_MS60000How long scan results are kept before scanning again, in milliseconds.
DISABLE_CACHEfalseSet to true to scan on every page load. Slower; mostly for testing.

TrueNAS

VariableDefault valueDescription
TRUENAS_API_KEY—A TrueNAS API key (System Settings, API Keys) to also show TrueNAS apps, VMs and system details.
TRUENAS_WS_BASE—Your TrueNAS address, like ws://192.168.1.100:80. Leave it out to find it by itself.
TRUENAS_TIMEOUT_MS90000How long to wait for TrueNAS details, in milliseconds. Raise it to 120000 or more if you have many apps or VMs and see timeouts.

Logs

VariableDefault valueDescription
DEBUGfalseSet to true for detailed logs while you look for a problem.
docker-compose.yml
name: portracker

services:
  portracker:
    image: mostafawahied/portracker:1.3.14
    container_name: portracker
    restart: unless-stopped
    stop_grace_period: 40s
    network_mode: bridge
    pid: "host"
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    environment:
      - TZ=$TZ
      - ENABLE_AUTH=true
      - SESSION_SECRET=change-me
    ports:
      - target: 4999
        published: "6158"
        protocol: tcp
    volumes:
      - type: bind
        source: /DATA/AppData/$AppID/data
        target: /data
        bind:
          create_host_path: true
      - type: bind
        source: /var/run/docker.sock
        target: /var/run/docker.sock
        read_only: true
    deploy:
      resources:
        limits:
          cpus: "1.00"
          memory: 512M
        reservations:
          cpus: "0.00"
          memory: 128M
    labels:
      icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/portracker/icon.png
    x-casaos:
      id: com.icestore.portracker
      envs:
        - container: TZ
          description:
            en_US: >-
              Your time zone. It is filled in from your ZimaOS time zone.
              Leave it unless you need another.
        - container: ENABLE_AUTH
          description:
            en_US: >-
              Turns on portracker's login screen and setup wizard. Set to
              false to leave the dashboard open to anyone on your network.
        - container: SESSION_SECRET
          description:
            en_US: >-
              Pre-filled with a random value. It keeps you signed in when the
              app restarts. You can replace it with your own random text.
      ports:
        - container: "4999"
          description:
            en_US: Dashboard web UI, published on host as 6158
      volumes:
        - container: /data
          description:
            en_US: The SQLite database with your settings, peers and login.
        - container: /var/run/docker.sock
          description:
            en_US: >-
              Read-only access to Docker, used to find your containers and
              their ports.

x-casaos:
  id: com.icestore.portracker
  architectures:
    - amd64
    - arm64
  main: portracker
  author: HSinghHira
  category: Networking
  developer: mostafa-wahied
  icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/portracker/icon.png
  thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/portracker/screenshot-1.png
  screenshot_link:
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/portracker/screenshot-1.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/portracker/screenshot-2.png
  title:
    en_US: portracker
  tagline:
    en_US: Live, self-hosted port monitoring and discovery for your homelab
  description:
    en_US: >-
      portracker scans your host and your Docker containers and builds a
      live map of every port in use, so messy spreadsheets and surprise port
      conflicts stop happening.


      **Features**


      - Finds ports on the host and in Docker containers by itself, and shows
        internal and published ports apart

      - Add other portracker servers as peers to see every server,
        container and VM on one dashboard

      - Built-in login with a first-run setup wizard (no OIDC or other
        sign-in providers yet)

      - One small container with a built-in SQLite database


      **How to use?**


      1. Open portracker from the Zima OS dashboard.

      2. Follow the setup wizard and make your admin username and password.

      3. portracker starts scanning right away. There is nothing else to set
         up to see host and Docker ports.

      4. To watch more machines, install portracker there too and add it as
         a peer from the Settings gear.
  tips:
    before_install:
      en_US: >-
        1. Start the installation. There is nothing you must set first.


        2. SESSION_SECRET is already filled with a random value. You can
           type your own random text if you like.


        3. Wait a few seconds for the first start.


        4. Open http://your-zimaos-ip:6158 in your browser.


        5. Follow the setup wizard to make your admin username and password.


        6. Forgot your password? Add RECOVERY_MODE=true in the app settings,
           restart, and find the recovery code in the app log.


        7. More settings, like UDP scanning and TrueNAS, are listed on the
           portracker page at https://icestore.hsinghhira.me/app/portracker/
           (Variables tab). You can add them now or later in the app settings.
  index: /
  port_map: "6158"
  scheme: http
  is_uncontrolled: false
  version: "1.3.14"
  update_at: "2026-10-25"
  release_notes:
    en_US: |-
      - Moved to IceStore, now on port 6158
      - Pinned to mostafawahied/portracker 1.3.14
      - Data moved to /DATA/AppData/portracker/data
  repo: "https://github.com/mostafa-wahied/portracker"
  support: "https://github.com/mostafa-wahied/portracker/issues"
  docs: "https://github.com/mostafa-wahied/portracker#readme"