Skip to content

ftsiadimos/SimpleDockerWebui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐳 LightDockerWebUI

LightDockerWebUI Logo

A lightweight, elegant web interface for Docker container management

Docker Pulls GHCR Available License: MIT Python Flask Bootstrap


🎯 Overview

LightDockerWebUI is a clean, fast, and simple web-based Docker management tool designed for home servers, development environments, and small deployments. No complex setup — just run and manage your containers from any browser.

✨ Features

📊 Dashboard

  • Real-time container status
  • Quick status indicators (running, stopped, paused)
  • Port mappings with clickable links
  • Container images and names at a glance

🎮 Container Control

  • Start / Stop / Restart containers
  • Delete containers with confirmation
  • Bulk actions on selected containers
  • Instant feedback with flash messages

📝 Live Logs

  • Real-time log streaming
  • Auto-scroll with manual override
  • Timestamp display
  • Search and filter logs

💻 Web Terminal

  • Interactive shell access:
    • Full server SSH terminal (via Terminal under Configuration)
    • Interactive container shell (full PTY via xterm.js) accessible from Containers → Terminal

🌐 Multi-Server Support

  • Connect to multiple Docker hosts
  • Easy server switching via dropdown
  • Local socket or remote TCP
  • Persistent server configuration

📱 Responsive Design

  • Mobile-friendly interface
  • Tablet optimized
  • Touch-friendly controls
  • Works on any screen size

Screenshot

Dashboard

Dashboard — View and manage all containers


📦 Installation Options

🐳 Docker (Recommended)
# Pull and run using Docker Hub
docker pull ftsiadimos/lightdockerwebui:latest

docker run -d --restart unless-stopped \
-p 8008:8008 \
--name=DockerManager \
-v $(pwd)/instance:/app/instance \
ftsiadimos/lightdockerwebui:latest

# or pull from GitHub Container Registry
# (repository is named "simpledockerwebui" there)
docker pull ghcr.io/ftsiadimos/simpledockerwebui:latest

docker run -d --restart unless-stopped \
-p 8008:8008 \
--name=DockerManager \
-v $(pwd)/instance:/app/instance \
ghcr.io/ftsiadimos/simpledockerwebui:latest
📄 Docker Compose
# docker-compose.yml
version: '3.8'

services:
  DockerManager:
    image: ftsiadimos/lightdockerwebui:latest  # or ghcr.io/ftsiadimos/simpledockerwebui:latest
    container_name: DockerManager
    ports:
      - "8008:8008"
    volumes:
      - ./instance:/app/instance
    restart: unless-stopped
docker-compose up -d
🦾 ARM64 Support
# Build for both amd64 and arm64 (requires docker buildx + QEMU enabled)
docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/ftsiadimos/simpledockerwebui:latest --push .

# Run the arm64 image on arm64 host (or with qemu emulation on amd64)
docker run --platform linux/arm64 -d --restart unless-stopped -p 8008:8008 -v $(pwd)/instance:/app/instance ghcr.io/ftsiadimos/simpledockerwebui:latest
🐍 From Source (Development)
# Clone repository
git clone https://github.com/ftsiadimos/lightdockerwebui.git
cd lightdockerwebui

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Run application
flask run --host=0.0.0.0 --port=8008

⚙️ Configuration

Connecting to Docker Hosts

LightDockerWebUI supports multiple Docker servers. Configure them through the web UI:

  1. Click Config in the navigation bar
  2. Add servers with a display name and connection details:
    • Local: Leave host empty to use /var/run/docker.sock
    • Remote: Enter IP/hostname and port (default: 2375 or 2376)
  3. Select the active server from the dropdown

Server Terminal (SSH)

  • A full interactive server terminal is available via the Terminal menu (under Configuration)
  • Container terminals are full PTY shells (using xterm.js) available from the Containers page; the legacy limited command terminal has been removed

Environment Variables

Variable Default Description
`FLASK_DEBUG` `0` Enable debug mode (development only)
`SECRET_KEY` (random) Flask secret key for sessions
`SQLALCHEMY_DATABASE_URI` `sqlite:///serverinfo.db` Database connection string

🛰️ API: /api/stats

LightDockerWebUI now exposes a lightweight JSON API for dashboard metrics.

  • GET /api/stats returns a JSON object with:
    • servers_count
    • containers_count
    • running_count
    • images_count
    • total_images
    • total_images_size_gb
    • networks_count
    • volumes_count
    • compose_stacks_count
    • recent_activity

Example usage

# get full metric object
curl -s http://localhost:8008/api/stats | jq .

# get total images
curl -s http://localhost:8008/api/stats | jq '.total_images'

# get total image size in GB
curl -s http://localhost:8008/api/stats | jq -r '.total_images_size_gb'

# single summary line
curl -s http://localhost:8008/api/stats | jq -r '"images=\(.total_images) size=\(.total_images_size_gb)"'

Note for custom host/port

If the app is not on localhost:8008, change to your host, e.g.:

curl -s http://docker.myserver:5000/api/stats | jq .

(Optional) Unix socket Access using netcat + HTTP over socket

printf 'GET /api/stats HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' | socat - UNIX-CONNECT:/var/run/docker.sock | jq .

Exposing Remote Docker Daemon

To manage containers on a remote host, enable TCP on the Docker daemon:

# Create systemd override
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
EOF

# Reload and restart
sudo systemctl daemon-reload
sudo systemctl restart docker

⚠️ Security Warning: Use TLS (port 2376) for production. Unencrypted connections should only be used on trusted networks.


🏗️ Project Structure

lightdockerwebui/
├── app/
│   ├── __init__.py          # Flask application factory
│   ├── main.py              # Routes, WebSocket handlers
│   ├── models.py            # SQLAlchemy models (DockerServer)
│   ├── forms.py             # WTForms (AddServer, SelectServer)
│   ├── static/              # CSS, JavaScript, images
│   └── templates/           # Jinja2 HTML templates
├── config.py                # Flask configuration classes
├── start.py                 # Application entry point
├── requirements.txt         # Python dependencies
├── Dockerfile               # Container build file
└── docker-compose.yml       # Compose configuration

🛠️ Development

# Clone and setup
git clone https://github.com/ftsiadimos/lightdockerwebui.git
cd lightdockerwebui
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Run with hot reload
export FLASK_DEBUG=1
flask run --host=0.0.0.0 --port=8008

Production deployment tips ⚙️

For production use we recommend running Gunicorn with the threaded worker class and a higher timeout to avoid workers being killed during occasional slow operations. Example command:

# Example Gunicorn command (used in Dockerfile / docker-compose)
/usr/local/bin/gunicorn -b :8008 -k gthread --workers 3 --threads 4 --timeout 120 start:app

Also ensure the Docker Python SDK is available in the environment where the app runs (needed to talk to Docker):

pip install docker

Tech Stack

  • Backend: Flask 3.x, Flask-SQLAlchemy, Flask-Sock
  • Frontend: Bootstrap 5.3, DataTables, jQuery
  • Database: SQLite (persistent server configuration)
  • Container: Docker SDK for Python

🤝 Contributing

Contributions are welcome! Here's how:

  1. Fork the repository
  2. Create a feature branch: `git checkout -b feature/awesome-feature`
  3. Commit changes: `git commit -m 'Add awesome feature'`
  4. Push to branch: `git push origin feature/awesome-feature`
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License — see LICENSE for details.


💬 Support & Links

🐛 Report Bug💡 Request Feature🐳 Docker Hub

Star this repo if you find it useful!


Made with ❤️ by Fotis Tsiadimos

About

Straightforward interface to control the containers for your docker home server.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors