La rete predefinita del container docker è sotto forma di bridge (nella stessa LAN dell'host, ma usando un IP LAN separato); quando il programma è in esecuzione nell'ambiente di produzione, basta configurare l'indirizzo di servizio corrispondente per connettersi al database, ai redis, ecc.
In un ambiente di sviluppo, se il servizio gira in docker e il database viene eseguito localmente, configurare 127.0.0.1 non è facile da usare.
Questo può essere risolto in due modi.
Soluzione 1:
Considera la macchina host e il container come due macchine separate e configura l'IP LAN o l'IP pubblico dell'host host quando configuri l'indirizzo.
Soluzione 2:
Scrivi l'indirizzo host direttamente come: host.docker.internal peròIl secondo metodo richiede una versione docker superiore alla 18.03 e deve essere disponibile su Windows e Mac。
Per testare se questi due metodi possono accedere all'host, puoi eseguire direttamente un'immagine con docker per far ping alla riga di comando:
Come puoi vedere dall'immagine sopra, accesso tramite containerhost.docker.internalPuoi accedere al servizio dell'host, controllando il file /etc/hosts, scoprirai che non c'è alcun redirect del nome di dominio e non conosci il principio specifico di base di docker.
Sia l'host che il container possono accedere ai servizi dell'host tramite host.docker.internal, ma l'indirizzo restituito dal comando ping è diverso, come segue:
|