La red predeterminada del contenedor docker es un puente (en la misma LAN que el host, pero usando una IP LAN separada); cuando el programa se ejecuta en el entorno de producción, solo necesitas configurar la dirección de servicio correspondiente para conectarse a la base de datos, redis, etc.
En un entorno de desarrollo, si el servicio se ejecuta en docker y la base de datos se ejecuta localmente, configurar 127.0.0.1 no es fácil de usar.
Esto se puede resolver de dos maneras.
Solución 1:
Trata la máquina anfitriona y el contenedor como dos máquinas separadas, y configura la IP LAN o IP pública del host al configurar la dirección.
Solución 2:
Escribe la dirección del host directamente como: host.docker.internal, eso síEl segundo método requiere una versión de docker superior a la 18.03 y debe estar disponible en Windows y Mac。
Para probar si estos dos métodos pueden acceder al host, puedes ejecutar directamente una imagen con docker para hacer ping a la línea de comandos:
Como puedes ver en la imagen de arriba, acceso por contenedorhost.docker.internalPuedes acceder al servicio del host, comprobando el archivo /etc/hosts, verás que no hay redirección de nombre de dominio y que no conoces el principio subyacente específico de docker.
Tanto el host como el contenedor pueden acceder a los servicios del host a través de host.docker.internal, pero la dirección que devuelve el comando ping es diferente, de la siguiente manera:
|