Some checks failed
Build and Publish Docker Image / build-and-push (push) Has been cancelled
|
||
---|---|---|
.github/workflows | ||
backend | ||
frontend | ||
screenshots | ||
.gitignore | ||
CHANGELOG.md | ||
docker-compose.yml | ||
Dockerfile | ||
eslint.config.cjs | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
package.json.bak | ||
README.md |
portracker
A self-hosted, real-time port monitoring and discovery tool.
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
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