Network scanning tools are often fragmented: heavy CLI utilities for scanning, separate backends to collect data, and distinct frontends to visualize results. Atlas takes a different approach by packaging all these layers in a single Docker container that runs a Go-based scanner, a FastAPI backend, and a React dashboard behind NGINX. This architecture delivers a multi-layered, real-time network discovery and visualization experience focused on both Docker networks and local subnets.
what atlas does: multi-layer network discovery and visualization
Atlas is a comprehensive network infrastructure scanner built as a single Docker container. Under the hood, it uses a Go CLI to perform multi-layered network discovery:
- ARP and Nmap fast scans for subnet host discovery
- Docker container introspection to map container networks
- Deep OS fingerprinting to gather detailed system metadata
The scanning engine tracks devices by their network interfaces, maintaining multiple IPs, MAC addresses, open ports, and OS metadata per device. This granularity helps handle complex environments where devices have multiple network identities.
The backend is a FastAPI server written in Python, handling orchestration, scan scheduling, and serving APIs. A React dashboard provides a real-time visualization of the discovered infrastructure, rendered as network graphs that update dynamically. NGINX acts as a reverse proxy, serving the React UI and proxying API requests to FastAPI.
All of this runs inside a Docker container configured with host networking and access to the Docker socket, enabling deep inspection of the host and Docker networks. Scan intervals are configurable, and authentication is optional but supported via environment variables.
architecture and design tradeoffs: hybrid stack in a single container
Atlas’s architecture is interesting for its hybrid use of Go, Python, and React working together inside one Docker container.
The Go CLI is responsible for the “heavy lifting” of network discovery. Go’s concurrency model and native networking libraries make it a solid choice for fast and efficient scanning. This avoids the overhead of Python for low-level network operations.
FastAPI is chosen for the backend API layer due to its speed, ease of use, and automatic interactive API docs. It orchestrates scans, stores metadata (likely in SQLite given the embedded nature), and exposes APIs for the frontend and external integrations.
The React dashboard is a modern SPA that visualizes the network topology with real-time updates, giving operators an interactive view of their network assets.
NGINX stitches the frontend and backend together inside the container, handling routing and serving static assets.
The tradeoff here is the requirement for privileged Docker container execution: host networking and Docker socket access introduce security considerations. This is necessary for the level of introspection Atlas provides, but it means it must be run carefully in trusted environments.
Another tradeoff is packaging everything in one container. While it simplifies deployment, it means the container image is larger and mixes different runtimes, which could complicate updates or debugging.
The code quality appears solid with a clear separation of concerns: the Go binary is standalone, FastAPI handles business logic, and React manages the UI. Scan intervals are configurable, allowing tuning based on network size and desired freshness.
quick start with docker
Atlas can be deployed easily via Docker with a single command. The container requires host networking, Linux capabilities for raw network access, and the Docker socket mounted for container introspection.
Here is the exact command from the project README:
docker run -d \
--name atlas \
--network=host \
--cap-add=NET_RAW \
--cap-add=NET_ADMIN \
-v /var/run/docker.sock:/var/run/docker.sock \
-e ATLAS_UI_PORT='8884' \
-e ATLAS_API_PORT='8885' \
-e ATLAS_ADMIN_USER='admin' \
-e ATLAS_ADMIN_PASSWORD='change-me' \
-e ATLAS_AUTH_TTL_SECONDS='86400' \
-e FASTSCAN_INTERVAL='3600' \
-e DOCKERSCAN_INTERVAL='3600' \
-e DEEPSCAN_INTERVAL='7200' \
-e SCAN_SUBNETS="192.168.1.0/24,10.0.0.0/24" \
keinstien/atlas:{tag}
Environment variables allow customization of UI and API ports, admin credentials, authentication TTL, and scanning schedules. If SCAN_SUBNETS is unset, Atlas auto-detects the local subnet.
Authentication is optional and disabled by default, but can be enabled by setting ATLAS_ADMIN_PASSWORD.
The UI is accessible at http://localhost:ATLAS_UI_PORT and the API docs at the corresponding API port.
verdict
Atlas is a solid choice if you need a self-contained, network-aware scanner that understands both Docker and traditional subnets. Its hybrid Go/Python/React architecture packaged in a single container simplifies deployment and gives you detailed, multi-layered insights.
The tradeoff is the privileged container requirements—host networking and Docker socket access mean you must trust the container and run it in secure environments.
For network operators and developers who want an integrated scanning and visualization tool without managing multiple components, Atlas strikes a good balance. The code quality and clear separation of roles make it approachable for customization or extension.
If you need a lightweight or agentless scanner without elevated privileges, this might not be the right fit. But if deep Docker network introspection combined with subnet scanning is your use case, Atlas is worth trying out.
Related Articles
- DockMon: secure multi-host Docker monitoring with a lightweight Go agent and real-time metrics — DockMon offers secure multi-host Docker monitoring with a Go agent using mTLS, FastAPI backend, React frontend, real-tim
- PortPal: interactive cross-platform desktop port monitor with D3.js network visualization — PortPal is a Tauri-based desktop app that visualizes listening ports and network topology in real time with D3.js, repla
- Portracker: A lightweight self-hosted port monitoring tool with secure Docker proxy integration — Portracker is a self-hosted port monitoring tool with embedded SQLite and Docker socket proxy for secure, read-only Dock
- Trivy: a unified security scanner for container images, filesystems, and Kubernetes — Trivy combines vulnerability detection, misconfiguration scanning, secret discovery, SBOM generation, and license analys
- Runtipi: Simplifying self-hosted Docker apps with an extensible app store — Runtipi abstracts Docker Compose complexity into a one-click web app store for self-hosting multiple services. Built wit
→ GitHub Repo: karam-ajaj/atlas ⭐ 1,103 · JavaScript