Dockpeek is a lightweight, self-hosted dashboard that gives you instant access to your Docker container web apps. Monitor ports, check and install updates with one click, and integrate seamlessly with Traefik — all from a single, intuitive interface.
- Port Mapping Overview — See all running containers and their published ports at a glance
- One-Click Access — Open containerized web apps instantly with direct links
- Traefik Integration — Auto-detect and display container addresses from Traefik labels
- Multi-Host Management — Manage multiple Docker hosts from one dashboard
- Zero Configuration — Works out of the box, auto-detecting containers
- Update Management — Check for image updates and install with a single click
- Responsive UI — Optimized for desktops, tablets, and smartphones
Enhance control with custom labels:
dockpeek.https
— Force HTTPS protocol for specific portsdockpeek.link
— Make container names clickable linksdockpeek.ports
— Add custom ports to display alongside detected portsdockpeek.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 |
Show Traefik integration column |
TAGS |
true |
Enable container tagging feature |
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 |
Organization 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
Here are some common questions about using Dockpeek.
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.
What permissions does Dockpeek need for updates?
To install container updates, Dockpeek needs:
For direct Docker socket access:
- Read/write access to
/var/run/docker.sock
For socket-proxy setups, ensure these permissions are enabled:
environment: - POST=1 # Required for API write operations - ALLOW_START=1 # Start containers after update - ALLOW_STOP=1 # Stop containers for update - ALLOW_RESTARTS=1 # Restart containers if needed - NETWORKS=1 # Connect containers to networksThe update feature works with all supported connection methods (local socket, remote socket-proxy, and multi-host configurations).
Made with ❤️ for the Docker community