From b65478ed576b1842aca06dfd7e30544f93a4197e Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 1 Apr 2025 10:09:04 +0200 Subject: [PATCH] Behebe DNS-Timeouts und Image-Pull-Probleme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Konfiguriere Google DNS Server (8.8.8.8, 8.8.4.4) für zuverlässigere Auflösung - Füge intelligente Erkennung vorhandener Docker-Images hinzu - Aktualisiere Dockerfile automatisch, um verfügbare Base-Images zu nutzen - Verwende generischere Image-Tags (node:alpine, python:slim) als Standard - Implementiere Fallback mit mehreren alternativen Image-Versionen 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- backend/Dockerfile | 2 +- install-backend.sh | 54 +++++++++++++++++++++--- install-frontend.sh | 54 +++++++++++++++++++++--- packages/reservation-platform/Dockerfile | 2 +- 4 files changed, 100 insertions(+), 12 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index e1f11bf..ef55684 100755 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3-slim +FROM python:slim WORKDIR /app diff --git a/install-backend.sh b/install-backend.sh index cb1e03d..2f30777 100755 --- a/install-backend.sh +++ b/install-backend.sh @@ -356,11 +356,55 @@ fi # Prüfen, ob erforderliche Basis-Images lokal verfügbar sind if ! docker image inspect python:3-slim &>/dev/null; then - log "${YELLOW}Basis-Image wird gedownloaded, dies kann einige Zeit dauern...${NC}" - if ! docker pull python:3-slim; then - error_log "Konnte Basis-Image nicht herunterladen." - log "Prüfen Sie Ihre Internetverbindung oder verwenden Sie ein bereits vorhandenes Image." - exit 1 + log "${YELLOW}Prüfe und setze DNS-Server für Docker...${NC}" + + # DNS-Einstellungen prüfen und anpassen + if [ -f /etc/docker/daemon.json ]; then + log "Bestehende Docker-Konfiguration gefunden." + else + log "Erstelle Docker-Konfiguration mit Google DNS..." + sudo mkdir -p /etc/docker + echo '{ + "dns": ["8.8.8.8", "8.8.4.4"] +}' | sudo tee /etc/docker/daemon.json > /dev/null + + # Docker neu starten, damit die Änderungen wirksam werden + if command -v systemctl &>/dev/null; then + sudo systemctl restart docker + sleep 5 + elif command -v service &>/dev/null; then + sudo service docker restart + sleep 5 + fi + fi + + # Versuche Image explizit mit anderen Tags herunterzuladen + log "${YELLOW}Versuche lokal vorhandene Python-Version zu finden...${NC}" + + # Suche nach allen verfügbaren Python-Images + PYTHON_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "python:") + + if [ -n "$PYTHON_IMAGES" ]; then + log "Gefundene Python-Images: $PYTHON_IMAGES" + # Verwende das erste gefundene Python-Image + FIRST_PYTHON=$(echo "$PYTHON_IMAGES" | head -n 1) + log "${GREEN}Verwende vorhandenes Python-Image: $FIRST_PYTHON${NC}" + + # Aktualisiere den Dockerfile + sed -i "s|FROM python:3-slim|FROM $FIRST_PYTHON|g" Dockerfile + log "Dockerfile aktualisiert, um lokales Image zu verwenden." + else + # Versuche unterschiedliche Python-Versionen + for PYTHON_VERSION in "python:3.11-slim" "python:3.10-slim" "python:3.9-slim" "python:slim" "python:alpine"; do + log "Versuche $PYTHON_VERSION zu laden..." + if docker pull $PYTHON_VERSION; then + log "${GREEN}Erfolgreich $PYTHON_VERSION heruntergeladen${NC}" + # Aktualisiere den Dockerfile + sed -i "s|FROM python:3-slim|FROM $PYTHON_VERSION|g" Dockerfile + log "Dockerfile aktualisiert, um $PYTHON_VERSION zu verwenden." + break + fi + done fi fi diff --git a/install-frontend.sh b/install-frontend.sh index d831f9b..c5435b4 100755 --- a/install-frontend.sh +++ b/install-frontend.sh @@ -363,11 +363,55 @@ fi # Prüfen, ob erforderliche Basis-Images lokal verfügbar sind if ! docker image inspect node:lts-alpine &>/dev/null; then - log "${YELLOW}Basis-Image wird gedownloaded, dies kann einige Zeit dauern...${NC}" - if ! docker pull node:lts-alpine; then - error_log "Konnte Basis-Image nicht herunterladen." - log "Prüfen Sie Ihre Internetverbindung oder verwenden Sie ein bereits vorhandenes Image." - exit 1 + log "${YELLOW}Prüfe und setze DNS-Server für Docker...${NC}" + + # DNS-Einstellungen prüfen und anpassen + if [ -f /etc/docker/daemon.json ]; then + log "Bestehende Docker-Konfiguration gefunden." + else + log "Erstelle Docker-Konfiguration mit Google DNS..." + sudo mkdir -p /etc/docker + echo '{ + "dns": ["8.8.8.8", "8.8.4.4"] +}' | sudo tee /etc/docker/daemon.json > /dev/null + + # Docker neu starten, damit die Änderungen wirksam werden + if command -v systemctl &>/dev/null; then + sudo systemctl restart docker + sleep 5 + elif command -v service &>/dev/null; then + sudo service docker restart + sleep 5 + fi + fi + + # Versuche Image explizit mit anderen Tags herunterzuladen + log "${YELLOW}Versuche lokal vorhandene Node-Version zu finden...${NC}" + + # Suche nach allen verfügbaren Node-Images + NODE_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "node:") + + if [ -n "$NODE_IMAGES" ]; then + log "Gefundene Node-Images: $NODE_IMAGES" + # Verwende das erste gefundene Node-Image + FIRST_NODE=$(echo "$NODE_IMAGES" | head -n 1) + log "${GREEN}Verwende vorhandenes Node-Image: $FIRST_NODE${NC}" + + # Aktualisiere den Dockerfile + sed -i "s|FROM node:lts-alpine|FROM $FIRST_NODE|g" Dockerfile + log "Dockerfile aktualisiert, um lokales Image zu verwenden." + else + # Versuche unterschiedliche Node-Versionen + for NODE_VERSION in "node:20-alpine" "node:18-alpine" "node:16-alpine" "node:alpine" "node:slim"; do + log "Versuche $NODE_VERSION zu laden..." + if docker pull $NODE_VERSION; then + log "${GREEN}Erfolgreich $NODE_VERSION heruntergeladen${NC}" + # Aktualisiere den Dockerfile + sed -i "s|FROM node:lts-alpine|FROM $NODE_VERSION|g" Dockerfile + log "Dockerfile aktualisiert, um $NODE_VERSION zu verwenden." + break + fi + done fi fi diff --git a/packages/reservation-platform/Dockerfile b/packages/reservation-platform/Dockerfile index be7a85b..4637719 100644 --- a/packages/reservation-platform/Dockerfile +++ b/packages/reservation-platform/Dockerfile @@ -1,4 +1,4 @@ -FROM node:lts-alpine +FROM node:alpine WORKDIR /app