Files
app-installer/docker_diagnose.py
SimolZimol 0f83f15588 new file: README.md
new file:   app.py
	new file:   config.example.json
	new file:   config.json
	new file:   docker_diagnose.py
	new file:   requirements.txt
	new file:   start.bat
	new file:   templates/available_projects.html
	new file:   templates/base.html
	new file:   templates/config.html
	new file:   templates/docker_status.html
	new file:   templates/index.html
	new file:   templates/project_details.html
	new file:   templates/project_details_fixed.html
	new file:   templates/project_details_new.html
	new file:   templates/project_details_old.html
	.gitignore
2025-07-04 23:50:04 +02:00

238 lines
7.5 KiB
Python

#!/usr/bin/env python3
"""
Docker Diagnose Tool für App Installer
Hilft bei der Diagnose von Docker-Problemen
"""
import subprocess
import sys
import os
import json
from datetime import datetime
def run_command(cmd, timeout=10):
"""Führe Kommando aus und gib Ergebnis zurück"""
try:
result = subprocess.run(
cmd,
capture_output=True,
text=True,
timeout=timeout,
shell=True
)
return {
'success': result.returncode == 0,
'stdout': result.stdout.strip(),
'stderr': result.stderr.strip(),
'returncode': result.returncode
}
except subprocess.TimeoutExpired:
return {
'success': False,
'stdout': '',
'stderr': f'Timeout nach {timeout} Sekunden',
'returncode': -1
}
except Exception as e:
return {
'success': False,
'stdout': '',
'stderr': str(e),
'returncode': -1
}
def check_docker_installation():
"""Prüfe Docker Installation"""
print("🔍 Prüfe Docker Installation...")
result = run_command("docker --version")
if result['success']:
print(f"✅ Docker installiert: {result['stdout']}")
return True
else:
print(f"❌ Docker nicht gefunden: {result['stderr']}")
print(" 💡 Installiere Docker Desktop von https://docker.com")
return False
def check_docker_daemon():
"""Prüfe Docker Daemon Status"""
print("\n🔍 Prüfe Docker Daemon...")
result = run_command("docker info")
if result['success']:
print("✅ Docker Daemon läuft")
return True
else:
print(f"❌ Docker Daemon nicht erreichbar: {result['stderr']}")
print(" 💡 Starte Docker Desktop")
return False
def check_docker_permissions():
"""Prüfe Docker Berechtigungen"""
print("\n🔍 Prüfe Docker Berechtigungen...")
result = run_command("docker ps")
if result['success']:
print("✅ Docker Berechtigungen OK")
return True
else:
print(f"❌ Docker Berechtigungsfehler: {result['stderr']}")
if "permission denied" in result['stderr'].lower():
print(" 💡 Starte als Administrator oder füge User zur docker Gruppe hinzu")
return False
def check_docker_images():
"""Prüfe vorhandene Docker Images"""
print("\n🔍 Prüfe Docker Images...")
result = run_command("docker images --format json")
if result['success']:
lines = result['stdout'].split('\n') if result['stdout'] else []
images = []
for line in lines:
if line.strip():
try:
img = json.loads(line)
images.append(img)
except:
pass
print(f"{len(images)} Docker Images gefunden")
for img in images[:5]: # Zeige ersten 5
print(f" - {img.get('Repository', 'unknown')}:{img.get('Tag', 'unknown')}")
if len(images) > 5:
print(f" ... und {len(images) - 5} weitere")
return True
else:
print(f"❌ Kann Images nicht abrufen: {result['stderr']}")
return False
def check_docker_containers():
"""Prüfe laufende Container"""
print("\n🔍 Prüfe Docker Container...")
result = run_command("docker ps -a --format json")
if result['success']:
lines = result['stdout'].split('\n') if result['stdout'] else []
containers = []
for line in lines:
if line.strip():
try:
container = json.loads(line)
containers.append(container)
except:
pass
running = [c for c in containers if c.get('State') == 'running']
print(f"{len(containers)} Container total, {len(running)} laufend")
for container in containers[:3]: # Zeige ersten 3
name = container.get('Names', 'unknown')
state = container.get('State', 'unknown')
print(f" - {name}: {state}")
return True
else:
print(f"❌ Kann Container nicht abrufen: {result['stderr']}")
return False
def check_docker_compose():
"""Prüfe Docker Compose"""
print("\n🔍 Prüfe Docker Compose...")
result = run_command("docker-compose --version")
if result['success']:
print(f"✅ Docker Compose verfügbar: {result['stdout']}")
return True
else:
# Versuche neue docker compose Syntax
result = run_command("docker compose version")
if result['success']:
print(f"✅ Docker Compose (v2) verfügbar: {result['stdout']}")
return True
else:
print("❌ Docker Compose nicht verfügbar")
print(" 💡 Docker Compose ist in Docker Desktop enthalten")
return False
def check_network_connectivity():
"""Prüfe Netzwerk-Konnektivität"""
print("\n🔍 Prüfe Netzwerk-Konnektivität...")
# Prüfe Docker Hub Verbindung
result = run_command("docker run --rm hello-world", timeout=30)
if result['success']:
print("✅ Docker Hub Verbindung OK")
return True
else:
print(f"❌ Docker Hub nicht erreichbar: {result['stderr']}")
print(" 💡 Prüfe Internetverbindung und Firewall")
return False
def check_system_resources():
"""Prüfe System-Ressourcen"""
print("\n🔍 Prüfe System-Ressourcen...")
result = run_command("docker system df")
if result['success']:
print("✅ Docker System-Info:")
for line in result['stdout'].split('\n'):
if line.strip():
print(f" {line}")
return True
else:
print(f"❌ Kann System-Info nicht abrufen: {result['stderr']}")
return False
def suggest_solutions():
"""Schlage Lösungen vor"""
print("\n🛠️ Lösungsvorschläge:")
print("1. Starte Docker Desktop neu")
print("2. Prüfe Windows-Dienste: Docker Desktop Service")
print("3. Prüfe Hyper-V/WSL2 Einstellungen")
print("4. Neustart des Computers")
print("5. Docker Desktop Neuinstallation")
print("\n📚 Weitere Hilfe:")
print("- Docker Docs: https://docs.docker.com/")
print("- Docker Desktop Troubleshooting: https://docs.docker.com/desktop/troubleshoot/")
def main():
"""Hauptfunktion"""
print("🐳 Docker Diagnose Tool")
print("=" * 50)
print(f"Zeitpunkt: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"System: {os.name}")
checks = [
check_docker_installation,
check_docker_daemon,
check_docker_permissions,
check_docker_images,
check_docker_containers,
check_docker_compose,
check_network_connectivity,
check_system_resources
]
results = []
for check in checks:
try:
result = check()
results.append(result)
except Exception as e:
print(f"❌ Fehler bei {check.__name__}: {e}")
results.append(False)
print("\n" + "=" * 50)
success_count = sum(1 for r in results if r)
print(f"📊 Ergebnis: {success_count}/{len(results)} Checks erfolgreich")
if success_count < len(results):
suggest_solutions()
else:
print("🎉 Alle Docker-Checks erfolgreich! Docker ist bereit.")
print("\n" + "=" * 50)
if __name__ == "__main__":
main()