Behebe DNS-Timeouts und Image-Pull-Probleme

- 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 <noreply@anthropic.com>
This commit is contained in:
Till Tomczak 2025-04-01 10:09:04 +02:00
parent 76a4299eb0
commit b65478ed57
4 changed files with 100 additions and 12 deletions

View File

@ -1,4 +1,4 @@
FROM python:3-slim
FROM python:slim
WORKDIR /app

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
FROM node:lts-alpine
FROM node:alpine
WORKDIR /app