Ga naar hoofdinhoud

Online zetten: draait hij echt?

Na een nieuwe versie zegt docker compose ps Up. Nu laat je Docker ook nakijken of je site antwoordt.

Een healthcheck​

Up betekent alleen dat het programma in de container draait. Of je site ook antwoordt, weet Docker niet. Een site die bij elk verzoek een 500 geeft, staat ook op Up. Met een healthcheck vraagt Docker zelf elke dertig seconden je site op. Zet hem in WSL in compose.yaml, bij je site, onder labels:

healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/')"]
interval: 30s
start_period: 30s
start_interval: 2s

test is het commando dat Docker in de container draait: een regel Python die je homepage opvraagt. Geeft die een fout of geen antwoord, dan is de test mislukt. In het image staat geen curl, maar wel Python. interval is hoe vaak Docker kijkt, en in de eerste dertig seconden (start_period) kijkt hij elke twee seconden (start_interval).

Commit en push, en zet de nieuwe versie op de server met de twee stappen. Nu staat er meer bij de status:

NAME STATUS
gastenboek-gastenboek-1 Up 4 seconds (healthy)

healthy betekent: de laatste test lukte. Traefik let erop: een container die nog niet gezond is, krijgt geen bezoekers. Vlak na een nieuwe versie geeft je site daarom twee of drie seconden 404 page not found, tot de eerste test lukt. In het logboek zie je de test ook, elke dertig seconden een GET / van 127.0.0.1.

Controlevraag
Je rolt een versie uit waarin je homepage door een fout een 500 geeft. De pagina /registreer werkt nog wel. Wat ziet een bezoeker die /registreer opent?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

unhealthy​

docker compose ps toont (unhealthy), en Traefik geeft voor je hele site 404 page not found.

Oorzaak: de healthcheck mislukt. Je homepage geeft een fout, of je site antwoordt niet op poort 8000. Traefik stuurt geen bezoekers naar een container die niet gezond is.

Oplossing: open de homepage in de container zelf, en lees de fout:

docker compose exec gastenboek python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/')"

Krijg je een traceback met HTTP Error 500, kijk dan in docker compose logs welke fout je site gaf. Ga zo nodig terug naar de vorige versie, zoals in les 35.

Opdrachten​

Opdracht 1: Run - Gezond na een nieuwe versie​

Zet de healthcheck in je compose.yaml, verander een tekst op je homepage, commit en push, en zet de nieuwe versie op je server. Kijk direct na docker compose up een paar keer met docker compose ps.

Antwoord

Op je laptop: git add, git commit en git push. Op de server de twee stappen van boven. Eerst staat er (health: starting), na een paar seconden (healthy). Daarna zie je de nieuwe tekst, met de oude berichten eronder.

Door naar les 37: een back-up.