No description
Find a file
Mostafa Wahied cc4f82211b
Some checks failed
Build and Publish Docker Image / build-and-push (push) Has been cancelled
Add Star History section to README
2025-08-25 09:49:05 -07:00
.github/workflows Fix/fix auto tag (#39) 2025-08-15 16:08:01 -07:00
backend Feature/fix unknown system ports (#46) 2025-08-23 14:40:47 -07:00
frontend Feature/fix unknown system ports (#46) 2025-08-23 14:40:47 -07:00
screenshots Update screenshot 2025-07-17 12:46:07 -07:00
.gitignore chore: update gitignore 2025-08-17 09:58:15 -07:00
CHANGELOG.md Feature/fix unknown system ports (#46) 2025-08-23 14:40:47 -07:00
docker-compose.yml Feature/fix unknown system ports (#46) 2025-08-23 14:40:47 -07:00
Dockerfile Feature/enhance internal ports (#38) 2025-08-15 15:08:31 -07:00
eslint.config.cjs Feature/allow service rename (#40) 2025-08-20 12:24:07 -07:00
LICENSE chore: initial release of portracker 2025-07-07 03:27:13 -07:00
package-lock.json Feature/enhance internal ports (#38) 2025-08-15 15:08:31 -07:00
package.json Feature/fix unknown system ports (#46) 2025-08-23 14:40:47 -07:00
package.json.bak Feature/enhance internal ports (#38) 2025-08-15 15:08:31 -07:00
README.md Add Star History section to README 2025-08-25 09:49:05 -07:00

portracker Logo

portracker

A self-hosted, real-time port monitoring and discovery tool.

License Docker Version Latest Release Build Status

portracker Dashboard Screenshot

By auto-discovering services on your systems, portracker provides a live, accurate map of your network. It helps eliminate manual tracking in spreadsheets and prevents deployment failures caused by port conflicts.


Key Features

  • Automatic Port Discovery: Scans the host system to find and display running services and their ports automatically. No manual data entry is needed.
  • Platform-Specific Collectors: Includes specialized collectors for Docker and TrueNAS to gather rich, contextual information from the host.
  • Internal Port Detection: Distinguishes between internal container ports and published host ports, providing complete visibility into containerized services.
  • Lightweight & Self-Contained: Runs as a single process with an embedded SQLite database. No external database dependencies like PostgreSQL or Redis are required.
  • Peer-to-Peer Monitoring: Add other portracker instances as peers to view all your servers, containers, and VMs from a single dashboard.
  • Hierarchical Grouping: Organize servers in a parent-child structure, perfect for nesting servers, e.g. a VM's portracker instance under its physical host.
  • Enhanced TrueNAS Discovery: Providing an optional TrueNAS API key allows portracker to discover running VMs* and gather enhanced system information like the OS version and uptime.
  • Modern & Responsive UI: A clean dashboard with light/dark modes, live filtering, and multiple data layout views (list, grid, table).

*Note: VMs discovered on TrueNAS with the optional API key are shown in read-only mode. To enable full monitoring, deploy a Portracker instance on each VM and add it as a separate server.

Deployment

Deployment is designed to be simple using Docker.

Quick Get Started

Using Docker Compose:

Create a docker-compose.yml file:

services:
  portracker:
    image: mostafawahied/portracker:latest
    container_name: portracker
    restart: unless-stopped
    pid: "host"  # Required for port detection
    # Required permissions for system ports service namespace access
    cap_add:
      - SYS_PTRACE     # Linux hosts: read other PIDs' /proc entries
      - SYS_ADMIN      # Docker Desktop: allow namespace access for host ports (required for MacOS)
    security_opt:
      - apparmor:unconfined # Required for system ports
    volumes:
      # Required for data persistence
      - ./portracker-data:/data
      # Required for discovering services running in Docker
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "4999:4999"
    # environment:
      # Optional: For enhanced TrueNAS features
      # - TRUENAS_API_KEY=your-api-key-here

Then, run the application:

docker-compose up -d

Using Docker Run:

docker run -d \
  --name portracker \
  --restart unless-stopped \
  --pid host \
  --cap-add SYS_PTRACE \
  --cap-add SYS_ADMIN \
  --security-opt apparmor=unconfined \
  -p 4999:4999 \
  -v ./portracker-data:/data \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  mostafawahied/portracker:latest

Enhanced Security with Docker Proxy

For enhanced security, you can run Portracker without direct access to the Docker socket by using a proxy. This restricts the Docker API permissions to read-only operations.

Using Docker Compose:

services:
  docker-proxy:
    image: tecnativa/docker-socket-proxy:latest
    container_name: portracker-docker-proxy
    restart: unless-stopped
    environment:
      - CONTAINERS=1
      - IMAGES=1
      - INFO=1
      - NETWORKS=1
      - POST=0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "2375:2375"

  portracker:
    image: mostafawahied/portracker:latest
    container_name: portracker
    restart: unless-stopped
    pid: "host"
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - ./portracker-data:/data
    ports:
      - "4999:4999"
    environment:
      - DOCKER_HOST=tcp://docker-proxy:2375
    depends_on:
      - docker-proxy

Using Docker Run:

# Start the Docker proxy
docker run -d \
  --name portracker-docker-proxy \
  --restart unless-stopped \
  -p 2375:2375 \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -e CONTAINERS=1 \
  -e IMAGES=1 \
  -e INFO=1 \
  -e NETWORKS=1 \
  -e POST=0 \
  tecnativa/docker-socket-proxy:latest

# Start Portracker
docker run -d \
  --name portracker \
  --restart unless-stopped \
  --pid host \
  --cap-add SYS_PTRACE \
  --cap-add SYS_ADMIN \
  --security-opt apparmor=unconfined \
  -p 4999:4999 \
  -v ./portracker-data:/data \
  -e DOCKER_HOST=tcp://localhost:2375 \
  mostafawahied/portracker:latest

Configuration

Configure portracker using environment variables.

Variable Description Default
PORT* The port the web application will run on. 4999
DATABASE_PATH* Path inside the container to the SQLite database file. /data/portracker.db
TRUENAS_API_KEY Optional API key for enhanced TrueNAS data collection.
CACHE_TIMEOUT_MS Duration in milliseconds to cache scan results. 60000
DISABLE_CACHE Set to true to disable all caching. false
INCLUDE_UDP Set to true to include UDP ports in scans. false
DEBUG Set to true for verbose application logging. false

*Required

Technical Stack

  • Backend: Node.js, Express, WebSocket, better-sqlite3
  • Frontend: React, Vite, Tailwind CSS, Shadcn UI
  • Containerization: Docker

Roadmap

Future development is focused on improving the application based on community feedback. Key areas include:

  • Adding user authentication.
  • Expanding the library of platform-specific collectors for other host systems.
  • Addressing bugs and incorporating requested changes from the community.

Star History

Star History Chart

Contributing

Contributions are welcome! Please feel free to open an issue to report a bug or suggest a feature, or submit a pull request with your improvements.

License

This project is licensed under the MIT License - see the LICENSE