MCPcopy Index your code
hub / github.com/dockpeek/dockpeek

github.com/dockpeek/dockpeek @v1.7.2 sqlite

repository ↗ · DeepWiki ↗ · release v1.7.2 ↗
338 symbols 919 edges 35 files 2 documented · 1%
README

dockpeek logo

Dockpeek

GitHub release (latest by date) GitHub Repo stars License Package Registry Docker Image Size Buy Me a Coffee

Quick Access & Easy Updates for Your Docker Containers

Dockpeek is a lightweight, self-hosted Docker dashboard for quick access to your containers.
Open web interfaces, view logs, monitor ports, and update images — all from one clean, intuitive interface.
It automatically detects Traefik labels and works out of the box with zero configuration.

✨ Key Features

  • One-click web access — Instantly open your containers’ dashboards and web apps
  • Automatic port mapping — Detect and display all published ports
  • Live container logs — Stream logs in real time
  • Traefik integration — Automatically extract service URLs from labels
  • Multi-host management — Control multiple Docker daemons from one interface
  • Image update checks — Detect and upgrade outdated containers

🏷️ Labels Support

Add labels to your containers to tag them, customize their appearance, or control how dockpeek interacts with them.

  • dockpeek.https — Force HTTPS protocol for specific ports
  • dockpeek.link — Turn container names into clickable links
  • dockpeek.ports — Add custom ports to display alongside detected ones
  • dockpeek.port-range-grouping — Control port range grouping (true/false)
  • dockpeek.tags — Organize and categorize containers with custom tags

Dockpeek Night mode screenshot

Container logs view

Dockpeek Container logs screenshot

Checking for updates

Dockpeek Checking for updates

Updates available

Dockpeek Updates available

Light mode

Dockpeek Light mode screenshot

🔧 Installation

Basic Setup (Recommended)

The easiest way to get started with dockpeek:

services:
  dockpeek:
    image: dockpeek/dockpeek:latest
    container_name: dockpeek
    environment:
      - SECRET_KEY=your_secure_secret_key # Required: Set a secure secret key
      - USERNAME=admin # username
      - PASSWORD=admin # password
    # Server name for UI (optional, auto-detected from Docker API if not set)
    #  - DOCKER_HOST_NAME=
    ports:
      - "3420:8000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

[!TIP] You can add labels to your other containers to tag them or control how dockpeek interacts with them.

Learn more about available dockpeek labels.

Option 2: Socket Proxy

For enhanced security, use a socket proxy to limit Docker API access:

services:
  dockpeek:
    image: dockpeek/dockpeek:latest
    container_name: dockpeek
    environment:
      - SECRET_KEY=your_secure_secret_key
      - USERNAME=admin
      - PASSWORD=admin
      - DOCKER_HOST=tcp://socket-proxy:2375 # Connect via socket proxy
    ports:
      - "3420:8000"
    depends_on:
      - socket-proxy
    restart: unless-stopped

  socket-proxy:
           # alternative: tecnativa/docker-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

🌐 Multi-Host Setup

Manage multiple Docker hosts from a single dashboard:

services:
  dockpeek:
    image: dockpeek/dockpeek:latest
    container_name: dockpeek
    restart: unless-stopped
    ports:
      - "3420:8000"
    environment:
      - SECRET_KEY=your_secure_secret_key
      - USERNAME=admin
      - PASSWORD=admin

      # --- Docker Host 1 (Local) ---
      - DOCKER_HOST_1_URL=unix:///var/run/docker.sock # Local Docker socket
      # DOCKER_HOST_1_NAME= is Optional: Auto-detected from Docker API if not set
      # 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 # Optional: Auto-detected from Docker API if not set
      - 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 # Optional: Auto-detected from Docker API if not set
      - 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] Dockpeek does not need to be installed on remote devices. Each remote host only needs the Docker API exposed over TCP (e.g. via a Docker Socket Proxy).

⚙️ Configuration

Required Environment Variables

Variable Description
SECRET_KEY Required. Essential for application functionality and session security
USERNAME Required. Username for dashboard login
PASSWORD Required. Password for dashboard login

Optional Configuration

Variable Default Description
PORT 8000 Port on which the application listens
DISABLE_AUTH false Set to true to disable authentication
DOCKER_HOST Local socket Primary Docker connection URL
DOCKER_HOST_NAME Auto-detected Display name for the primary server (auto-detected from Docker API if not set)
DOCKER_HOST_PUBLIC_HOSTNAME Auto-detected Optional hostname or IP for generating clickable links
DOCKER_CONNECTION_TIMEOUT 2 Connection timeout in seconds (eg. 0.5, 5) for Docker host discovery
UPDATE_FLOATING_TAGS disabled Update check mode: latest, major (e.g., 8.3.38), or minor (e.g., 8.3.38.3) (default: exact tags)
TRUST_PROXY_HEADERS false Set to true to enable proxy header support (X-Forwarded-*)
TRUSTED_PROXY_COUNT 1 Number of trusted proxies when TRUST_PROXY_HEADERS=true
TRAEFIK_LABELS true Set to false to hide Traefik column
TAGS true Set to false to hide tags column
PORT_RANGE_GROUPING true Set to false to disable port range grouping globally
PORT_RANGE_THRESHOLD 5 Minimum number of consecutive ports to group as a range (see Port Range Grouping)
CUSTOM_REGISTRY_TEMPLATES {} URL templates for custom/private registries using {0}, {1}, {2} placeholders (see Custom Registry Templates)

Multi-Host Variables

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 (auto-detected from Docker API if not set)
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 it
  • USERNAME and PASSWORD are required unless DISABLE_AUTH=true
  • Multi-host variables require matching N identifiers (URL, name, hostname)

Custom Registry Templates

Dockpeek supports custom URL templates for private or self-hosted Docker registries like Gitea, Harbor, or GitLab. This makes registry icons clickable and links directly to your registry's web interface.

Configuration:

environment:
  - |
    CUSTOM_REGISTRY_TEMPLATES={
      "git.example.com": {"urlTemplate": "https://git.example.com/{1}/-/packages/container/{2}"},
      "harbor.company.com": {"urlTemplate": "https://harbor.company.com/harbor/projects/{1}/repositories/{2}"}
    }

How it works:

The placeholders {0}, {1}, {2}, etc. are replaced with parts of your image name:

For an image like git.example.com/myuser/myapp:latest: * {0} = git.example.com (registry host) * {1} = myuser (first path component) * {2} = myapp (second path component) * {3}, {4}, etc. for deeper paths if needed

Port Range Grouping

Dockpeek automatically groups consecutive ports into ranges for cleaner display. For example, ports 601, 602, 603, 604, 605, 606 will be displayed as a single range "601-606" instead of individual port badges.

Per-Container Configuration:

labels:
  - "dockpeek.port-range-grouping=false"  # Disable for this container
  - "dockpeek.port-range-grouping=true"   # Enable for this container (overrides global)

🏷️ Container Labels

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

Available Labels

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.port-range-grouping Control port range grouping dockpeek.port-range-grouping=false
dockpeek.tags tags dockpeek.tags=web,prod

🐳 Docker Swarm Support

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.

swarm

Click to see Example stack file (docker-compose-swarm-socket.yml)

``yaml services: dockpeek: image: dockpeek/dockpeek:latest environment: - SECRET_KEY=your_secure_secret_key - USERNAME=admin - PASSWORD=admin - 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:

Core symbols most depended-on inside this repo

get
called by 181
dockpeek/update.py
updateDisplay
called by 15
dockpeek/static/js/modules/filters.js
apiUrl
called by 13
dockpeek/static/js/modules/config.js
discover_docker_clients
called by 11
dockpeek/docker_utils.py
updatePruneBadge
called by 9
dockpeek/static/js/modules/prune.js
close
called by 8
dockpeek/static/js/modules/logs-viewer.js
stopStreaming
called by 7
dockpeek/static/js/modules/logs-viewer.js
is_cancelled
called by 6
dockpeek/update.py

Shape

Function 160
Method 134
Class 25
Route 19

Languages

TypeScript50%
Python50%

Modules by API surface

dockpeek/main.py40 symbols
dockpeek/static/js/modules/logs-viewer.js38 symbols
dockpeek/docker_utils.py38 symbols
dockpeek/update.py29 symbols
dockpeek/update_manager.py28 symbols
dockpeek/static/js/modules/modals.js18 symbols
dockpeek/static/js/modules/filters.js18 symbols
dockpeek/static/js/modules/data-fetch.js14 symbols
dockpeek/static/js/modules/drag-drop.js13 symbols
dockpeek/get_data.py13 symbols
dockpeek/static/js/modules/ansi-parser.js12 symbols
dockpeek/static/js/modules/ui-utils.js11 symbols

Dependencies from manifests, versioned

@tailwindcss/cli4.1.11 · 1×
tailwindcss4.1.11 · 1×

For agents

$ claude mcp add dockpeek \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact