Docker ejecuta Spring Cloud usando una IP externa
Al implementar Spring Cloud con Docker en varias máquinas, encontramos un problema, es decir, dentro del contenedor de Docker, la instancia Spring Cloud eureka solo puede obtener la IP de la red interna de Docker, como 172. x.x.x, y regístrelo en el centro de registro; en este momento, otros servicios no pueden acceder al servicio fuera de Docker a través de esta IP. Hay dos soluciones:
Al iniciar el contenedor, agregue la IP del host a la variable de entorno del contenedor y luego use la variable de entorno en Spring Boot application.yml.
application.yml
Agregue la variable de entorno HOST al iniciar Docker:
O use docker-compose:
Coloque el contenedor en modo host Ejecutar
Configurar el acceso IP en Spring Cloud
Múltiples tarjetas de red
Especificar IP es útil en ciertos escenarios, como un servidor con eth0. tres tarjetas de red, eth1 y eth2, pero otros servidores pueden acceder a eth1; si Eureka Client registra eth0 o eth2 en Eureka Server, otros microservicios no podrán llamar a la interfaz del microservicio a través de esta IP.
Si se usa en un entorno de producción, generalmente la IP no se usará para registrarse directamente en el centro de registro de eureka. Dado que el entorno de producción generalmente es administrado por un clúster k8s u otro clúster acoplable similar, el nombre del servicio. Generalmente se utilizará , etc. Regístrese y luego reenvíelo al servicio específico mediante k8s.
Enlace de referencia: