Debugging
Ziel
In diesem Projekt geht es darum, ein kaputtes Docker Setup zu debuggen und zu reparieren. Sie werden:
- eine nicht-funktionale Demo-App zum Laufen bringen
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe - Demoapplikation reparieren
- Wechseln Sie in den Ordner
BROKEN-docker-demoapp
. In diesem befindet sich ein Setup für die docker-demoapp. Leider hat Ihr Kollege, beim Versuch die Anwendung zu verbessern, einiges kaputt gemacht und braucht jetzt Ihre Hilfe um das Ganze wieder zum Laufen zu bringen.
Versuchen Sie die Fehler selbständig Schritt für Schritt zu beheben, bis die Anwendung online erreichbar ist und die Datenbankverbindung funktioniert. Wenn Sie die Anwendung mit docker compose up -d
starten, wird der Container automatisch gebaut und Sie sehen die Fehler, die im Build Prozess auftreten. Wenn diese behoben sind, können Sie mit docker compose logs -f
live sehen, was im Container geloggt wird. Nutzen Sie für alles Weitere das Cheatsheet.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
Hier finden Sie Lösungen zu verschiedenen Fehlermeldungen, die im Laufe dieses Prozesses auftauchen können.
- Fehler bei beliebigem Docker Compose Befehl:
ERROR: The Compose file './docker-compose.yml' is invalid...
In der docker-compose.yml
fehlt in Zeil 6 ein -
. Verändern Sie ./volumes/webapp-data:/data/notes
zu - ./volumes/webapp-data:/data/notes
.
- Fehler beim Bauen des Containers:
Error response from daemon: dockerfile parse error line 18: unknown instruction: COPI
Ändern Sie in Zeile 18 im Dockerfile den Befehl COPI
zu COPY
.
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
In Zeile 14 im Dockerfile hat sich ein Tippfehler eingeschlichen. Ändern Sie WORKDIR /ap
zu WORKDIR /app
. Damit wird der pip
Befehl dann in dem Ordner ausgeführt in den auch die requirements.txt
kopiert wurde.
ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/home/app-runner'
Der Befehl pip install
sollte hier noch als root
ausgeführt werden, damit er die Rechte für die Installation hat. Verschieben Sie dafür die Zeile 12 mit USER app-runner
unter den pip install
Befehl.
- Fehler nach dem Starten des Containers:
ERROR: Connection to MariaDB Server could not be established: Unknown MySQL server host 'database' (-3)
Das Netzwerk der Datenbank ist nicht an die Webapp angeschlossen. Erweitern Sie die Definition des webapp
services in der docker-compose.yml
um das Netzwerk:
networks:
- database-network
- Fehler nach Eingabe einer Notiz:
PermissionError: [Errno 13] Permission denies: '/data/notes/note_....txt'
Da der gemountete Ordner webapp-data
nur eine Freigabe für root und nicht für den Nutzer besitzt, können die Notizen hier nicht gesichert werden. Die Rechte des Ordners müssen also auf die ID des Nutzers geändert werden.
Wechseln Sie deshalb in den Ordner volumes/webapp-data
und geben Sie folgenden Befehl ein:
chown 10100:10100 .