Het standaardnetwerk van de docker-container is in de vorm van een bridge (in hetzelfde LAN als de host, maar met een apart LAN-IP); wanneer het programma draait in de productieomgeving, hoef je alleen het bijbehorende serviceadres te configureren om verbinding te maken met de database, redis, enzovoort.
In een ontwikkelomgeving, als de service draait in docker en de database lokaal draait, is het configureren van 127.0.0.1 niet eenvoudig te gebruiken.
Dit kan op twee manieren worden opgelost.
Oplossing 1:
Behandel de hostmachine en container als twee aparte machines, en configureer het LAN-IP of publieke IP van de hosthost bij het configureren van het adres.
Oplossing 2:
Schrijf het hostadres echter direct als: host.docker.internal,De tweede methode vereist docker-versie groter dan 18.03 en moet beschikbaar zijn op Windows en Mac。
Om te testen of deze twee methoden toegang hebben tot de host, kun je direct een image uitvoeren met docker om de commandoregel te pingen:
Zoals je op de bovenstaande afbeelding kunt zien, container-toeganghost.docker.internalJe kunt toegang krijgen tot de service van de host; door het /etc/hosts-bestand te controleren, zul je zien dat er geen domeinnaam-redirect is en je het specifieke onderliggende principe van docker niet kent.
Zowel de host als de container kunnen toegang krijgen tot de diensten van de host via host.docker.internal, maar het adres dat door het ping-commando wordt teruggegeven is anders, als volgt:
|