A clean, professional Docker management dashboard built with React and TypeScript. Designed for managing Docker containers, images, volumes, and networks on any headless server via a web interface.
- Container Management: Start, stop, restart, create, inspect, and delete containers
- Container Logs: View real-time logs for any container with optional follow mode
- Image Management: View image details, pull new images, and delete unused images
- Network Management: Browse Docker networks and inspect their configuration
- Volume Management: View volumes and their disk usage
- Project Grouping: Group containers by Docker Compose project
- Cleanup Tools: Prune containers, images, and volumes to free space
- Resource Monitoring: CPU and memory usage for running containers
- System Overview: Docker daemon version, image/container counts, and disk usage
- Node.js 18+
- Docker daemon running
- Docker socket accessible at
/var/run/docker.sock
npm installnpm run devThe frontend runs on http://localhost:5173 and the API server on http://localhost:3001.
Access from other machines using the network address (e.g., http://192.168.1.x:5173).
npm run builddocker-dash/
├── server/
│ └── index.js # Express API proxy for Docker socket
├── src/
│ ├── App.tsx # Main React component
│ ├── main.tsx # React entry point
│ ├── index.css # Styles
│ ├── services/
│ │ └── docker.ts # API client
│ ├── types/
│ │ └── docker.ts # TypeScript interfaces
│ └── components/
│ ├── Modal.tsx
│ ├── ContainerInspectModal.tsx
│ ├── CreateContainerModal.tsx
│ ├── PullImageForm.tsx
│ ├── NetworkTable.tsx
│ └── VolumeTable.tsx
└── vite.config.ts # Vite configuration with proxy
All endpoints are prefixed with /api and served by the Express proxy, which forwards them to the Docker daemon over its Unix socket.
| Method | Endpoint | Description |
|---|---|---|
| GET | /containers |
List all containers (including stopped) |
| POST | /containers/create |
Create and start a new container from an image |
| GET | /containers/:id/stats |
Resource stats (CPU, memory, network) for a container |
| GET | /containers/:id/inspect |
Full container configuration and state |
| GET | /containers/:id/logs |
Recent container logs (multiplexed format, parsed) |
| POST | /containers/:id/start |
Start a stopped container |
| POST | /containers/:id/stop |
Stop a running container |
| POST | /containers/:id/restart |
Restart a container |
| DELETE | /containers/:id |
Force-delete a container |
| Method | Endpoint | Description |
|---|---|---|
| GET | /images |
List all images |
| GET | /images/:id |
Image details (config, env, command) |
| POST | /images/pull |
Pull an image by name |
| DELETE | /images/:id |
Delete an image |
| Method | Endpoint | Description |
|---|---|---|
| GET | /volumes |
List volumes with usage data |
| GET | /networks |
List Docker networks |
| Method | Endpoint | Description |
|---|---|---|
| GET | /system |
Docker daemon info (version, container/image counts) |
| GET | /df |
Disk usage across images, containers, and volumes |
| Method | Endpoint | Description |
|---|---|---|
| POST | /prune/containers |
Remove all stopped containers |
| POST | /prune/images |
Remove dangling images |
| POST | /prune/images/all |
Remove all unused images |
| POST | /prune/volumes |
Remove unused volumes |
- React 19
- TypeScript
- Vite
- Framer Motion
- Phosphor Icons
- Express (API proxy)
Created by Chris Bunting <cbuntingde@gmail.com>
