Ga naar hoofdinhoud

Debuggen

Debuggen van draaiende containers

Net zoals met alle software systemen en applicaties kan er ook in een docker container vanalles mis gaan. Het is handig om bepaalde commando's te kennen die je kunnen helpen deze problemen snel te debuggen.

  • docker exec om commando's in de docker container te kunnen draaien (cat, touch, echo, een shell openen)
  • docker inspect om de configuratie van een docker container te bekijken / bestuderen
  • docker logs om de logs van een file te bekijken (stdout, stderr)

Uitgelegd aan de hand van een voorbeeld

Je vindt de code die gebruikt wordt in dit voorbeeld ook terug op github.

In het voorbeeld wordt een simpele NodeJS web server opgestart. In de web server zijn intentioneel wat foutjes gestoken die ervoor zorgen dat er zich een crash kan voordoen.

Wanneer je de server start en een API call doet naar GET http://localhost:3000/crash dan zal de server crashen en bijgevolg ook de container.

Je kan zien dat de container gecrasht is door docker ps -a te doen en te zien dat de container gestopt is.

Een goede eerste stap is vaak om de logs van de container te bekijken:

docker log <container_id>

Hieruit zal je al kunnen afleiden of de applicatie zelf een error naar de stderr of stdout gelogd heeft.

Stel dat je per ongeluk GET http://localhost:8080/crash hebt proberen doen en een 404 terugkrijgt, dan kan je met best even controleren hoe de container geconfigureerd is om op te starten.

docker inspect <container_id>

Hiermee vind je ondermeer de netwerkconfiguratie terug. Je kan bijvoorbeeld ook zien welke environment variabelen ingesteld zijn, en of je niet vergeten bent een parameter toe te voegen in de .env file.

Opruimen van ongebruikte resources (docker prune, docker system df)

  • docker system df wordt gebruikt om te inspecteren wat er opgeruimd kan worden
  • docker prune is om alle ongebruikte resources op te kuisen