Ga naar hoofdinhoud

Online zetten: een container draaien

Je image staat klaar. Je start er een container van, en opent je site in je browser, nu uit de container.

Starten​

docker run -p 8000:8000 gastenboek

Je ziet bijna dezelfde regels als bij fastapi run in les 11, met production mode en http://0.0.0.0:8000. Ze zien er wat kaler uit: Docker geeft de container geen echt scherm, en dan laat fastapi de opmaak weg. Open http://127.0.0.1:8000 in je browser op Windows.

Het gastenboek is leeg. De databases uit les 11 staan nog in je projectmap, maar .dockerignore hield ze buiten het image. Een container begint met wat er in het image staat, en daar zit geen enkele database in.

Stop de container met Ctrl+C.

Een poort naar buiten​

Een container is afgeschermd: van buiten kan niemand erbij, ook jij niet. Met -p (publish) maak je één deur open. -p 8000:8000 betekent: wat op poort 8000 van deze computer binnenkomt, gaat naar poort 8000 in de container. Het eerste getal is van de computer, het tweede van de container.

Nu zie je ook waarom de container op 0.0.0.0 luistert. Een verzoek via -p komt de container binnen over zijn eigen netwerk. Luisterde je site op 127.0.0.1, dan nam hij alleen verzoeken aan van binnen de container zelf, en kwam jouw browser nooit binnen.

Controlevraag
Je start je container met docker run -p 9000:8000 gastenboek. Welk adres open je in je browser?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

port is already allocated​

docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint …: Bind for 0.0.0.0:8000 failed: port is already allocated

Draait er een ander programma dan Docker op die poort, dan eindigt de regel met address already in use.

Oorzaak: poort 8000 van deze computer is al bezet, door een andere container of een ander programma. Bijvoorbeeld je site uit les 11, als die nog draait met fastapi run.

Oplossing: stop dat programma met Ctrl+C in zijn terminal, of kies een andere poort voor de computer: -p 8001:8000. Docker maakt de container wel aan voordat het misgaat; zulke containers ruim je op in les 21.

De browser krijgt geen antwoord​

De terminal toont de startregels, maar http://127.0.0.1:8000 laadt niet, en er komt geen regel met GET bij.

Oorzaak: je startte de container zonder -p. Er is geen deur van je computer naar de container.

Oplossing: stop de container met Ctrl+C, en start hem opnieuw met -p 8000:8000.

Door naar les 17: op de achtergrond.