Dockpeek is a lightweight, self-hosted Docker dashboard built for efficiency and simplicity. With Dockpeek, you can instantly access container web interfaces, monitor ports, and apply updates in a single click. It also auto-detects Traefik labels to display container addresses, helping you keep everything organized — all from one clean and intuitive interface.
- Port Mapping Overview — Instantly see all running containers and their published ports
- Traefik Integration — Auto-detect and display container addresses from Traefik labels
- One-Click Access — Jump directly into containerized web interfaces
- Multi-Host Management — Manage multiple Docker hosts in one place
- Zero Configuration — Works out of the box, no manual setup required
- Update Management — Check for image updates and upgrade containers with a click
- Responsive UI — Smooth experience on desktop, tablet, and mobile
Customize how your containers are displayed with custom labels:
dockpeek.https
— Force HTTPS protocol for specific portsdockpeek.link
— Turn container names into clickable linksdockpeek.ports
— Add custom ports to display alongside detected onesdockpeek.tags
— Organize and categorize containers with custom tags
The easiest way to get started with Dockpeek:
services:
dockpeek:
image: ghcr.io/dockpeek/dockpeek:latest
container_name: dockpeek
environment:
- SECRET_KEY=your_secure_secret_key # Required: Set a secure secret key
- USERNAME=admin # username
- PASSWORD=secure_password # password
ports:
- "3420:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
Then visit: http://localhost:3420
For enhanced security, use a socket proxy to limit Docker API access:
services:
dockpeek:
image: ghcr.io/dockpeek/dockpeek:latest
container_name: dockpeek
environment:
- SECRET_KEY=your_secure_secret_key
- USERNAME=admin
- PASSWORD=secure_password
- DOCKER_HOST=tcp://socket-proxy:2375 # Connect via socket proxy
ports:
- "3420:8000"
depends_on:
- socket-proxy
restart: unless-stopped
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: dockpeek-socket-proxy
environment:
- CONTAINERS=1
- IMAGES=1
- PING=1
- VERSION=1
- INFO=1
- POST=1
# Required for container updates
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
- NETWORKS=1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
read_only: true
tmpfs:
- /run
restart: unless-stopped
Manage multiple Docker hosts from a single dashboard:
services:
dockpeek:
image: ghcr.io/dockpeek/dockpeek:latest
container_name: dockpeek
restart: unless-stopped
ports:
- "3420:8000"
environment:
- SECRET_KEY=your_secure_secret_key
- USERNAME=admin
- PASSWORD=secure_password
# --- Docker Host 1 (Local) ---
- DOCKER_HOST_1_URL=unix:///var/run/docker.sock # Local Docker socket
- DOCKER_HOST_1_NAME=Local Development # Display name in UI
# DOCKER_HOST_1_PUBLIC_HOSTNAME is optional; uses host IP by default
# --- Docker Host 2 (Remote Server) ---
- DOCKER_HOST_2_URL=tcp://192.168.1.100:2375 # Remote socket proxy
- DOCKER_HOST_2_NAME=Production Server # Display name in UI
- DOCKER_HOST_2_PUBLIC_HOSTNAME=server.local # Optional: Custom hostname for links
# --- Docker Host 3 (Tailscale) ---
- DOCKER_HOST_3_URL=tcp://100.64.1.5:2375 # Tailscale IP
- DOCKER_HOST_3_NAME=Remote VPS # Display name in UI
- DOCKER_HOST_3_PUBLIC_HOSTNAME=vps.tailnet.ts.net # Optional: Tailscale FQDN
# --- Continue pattern for additional hosts (4, 5, etc.) ---
volumes:
# Required only if you are connecting to a local socket
- /var/run/docker.sock:/var/run/docker.sock:ro
Tip
Install a Docker Socket Proxy on each remote host for secure API access.
Variable | Description |
---|---|
SECRET_KEY |
Required. Essential for application functionality and session security |
USERNAME |
Required. Username for dashboard login |
PASSWORD |
Required. Password for dashboard login |
Variable | Default | Description |
---|---|---|
DISABLE_AUTH |
false |
Set to true to disable authentication |
TRAEFIK_LABELS |
true |
Set to false to hide Traefik integration column |
TAGS |
true |
Set to false to disable container tagging |
DOCKER_HOST |
Local socket | Primary Docker connection URL |
DOCKER_HOST_NAME |
default |
Display name for the primary server in the UI |
DOCKER_HOST_PUBLIC_HOSTNAME |
Auto-detected | Optional hostname or IP for generating clickable links |
For additional Docker hosts, use the pattern DOCKER_HOST_N_*
:
Variable | Description |
---|---|
DOCKER_HOST_N_URL |
Docker API URL (e.g., tcp://host:2375 ) |
DOCKER_HOST_N_NAME |
Display name in the dashboard |
DOCKER_HOST_N_PUBLIC_HOSTNAME |
Optional public hostname for links |
Important
Important Configuration Requirements:
SECRET_KEY
must always be set - dockpeek will not function without itUSERNAME
andPASSWORD
are required unlessDISABLE_AUTH=true
- Multi-host variables require matching
N
identifiers (URL, name, hostname)
Customize how containers appear and behave in Dockpeek:
services:
webapp:
image: nginx:latest
ports:
- "3001:80"
labels:
- "dockpeek.ports=8080,9090" # Show additional ports
- "dockpeek.https=3001,8080" # Force HTTPS for these ports
- "dockpeek.link=https://myapp.local" # Make container name clickable
- "dockpeek.tags=frontend,production" # Add organization tags
Label | Purpose | Example |
---|---|---|
dockpeek.ports |
Show additional ports | dockpeek.ports=8080,9090 |
dockpeek.https |
Force HTTPS for ports | dockpeek.https=9002,3000 |
dockpeek.link |
Custom container link | dockpeek.link=https://app.com |
dockpeek.tags |
tags | dockpeek.tags=web,prod |
Dockpeek natively supports Docker Swarm, You can deploy Dockpeek as a stack, with a single socket-proxy instance, and view/manage all Swarm services and tasks in the dashboard. This configuration is ideal for production clusters using Traefik as an ingress proxy.
Click to see Example stack file (docker-compose-swarm-socket.yml)
services:
dockpeek:
image: ghcr.io/dockpeek/dockpeek:latest
environment:
- SECRET_KEY=your_secure_secret_key
- USERNAME=admin
- PASSWORD=secure_password
- TRAEFIK_LABELS=true
- DOCKER_HOST=tcp://tasks.socket-proxy:2375 # Connect to Swarm manager via socket-proxy
ports:
- "3420:8000"
networks:
- traefik
- dockpeek-internal
deploy:
replicas: 1
labels:
- "traefik.enable=true"
- "traefik.http.routers.dockpeek.rule=Host(`dockpeek.example.com`)"
- "traefik.http.routers.dockpeek.entrypoints=websecure"
- "traefik.http.routers.dockpeek.tls=true"
- "traefik.http.services.dockpeek.loadbalancer.server.port=8000"
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
environment:
- CONTAINERS=1
- IMAGES=1
- PING=1
- VERSION=1
- INFO=1
- POST=1
- SERVICES=1 # Enable Swarm services API
- TASKS=1 # Enable Swarm tasks API
- NODES=1 # Enable Swarm nodes API
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- type: tmpfs
target: /run
tmpfs:
size: 100000000
networks:
- socket-proxy
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
networks:
socket-proxy:
traefik:
external: true
How it works:
- The dockpeek and socket-proxy services share a private network for secure API access.
- The traefik network is external and should be pre-created by your Traefik deployment.
- Traefik labels on dockpeek expose the dashboard securely at your chosen domain.
- The DOCKER_HOST variable points to the socket-proxy service, which must run on a Swarm manager node.
- Dockpeek will auto-detect Swarm mode and show all services/tasks in the dashboard, with all the usual features (port mapping, Traefik integration, update checks, etc.).
Deploy with:
docker stack deploy -c docker-compose-swarm-socket.yml dockpeek
Answers to common questions:
How do I search for containers by port?
Use the format
:port
in the search box. For example, typing:8080
will show all containers exposing port 8080.
When does Dockpeek use HTTPS automatically?
Dockpeek automatically uses HTTPS for:
- Container port
443/tcp
- Host ports ending with
443
(e.g.,8443
,9443
)- Ports specified with the
dockpeek.https
label
How do I make container names clickable?
Use the
dockpeek.link
label:labels: - "dockpeek.link=https://myapp.example.com"This is especially useful with reverse proxies to link directly to public addresses.
How do I show ports for containers without port mapping?
Some containers (like those using host networking or behind reverse proxies) don't expose ports through Docker's standard port mapping. Use the
dockpeek.ports
label:labels: - "dockpeek.ports=8096,8920"
How do I clear the search filter?
Click on the "Dockpeek" logo/title at the top of the page to reset the search and return to the full container view.
Which environment variables are required for updates when using Docker socket-proxy?
For socket-proxy setups, ensure these permissions are enabled:
environment: - ALLOW_START=1 - ALLOW_STOP=1 - ALLOW_RESTARTS=1 - NETWORKS=1The update feature works with all supported connection methods (local socket, remote socket-proxy, and multi-host configurations).