Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

469
Vistas
Cómo acceder al servicio que ejecuta docker con network_mode: "host" desde una IP externa

Mi escenario:

Tengo un servidor con IP xxxx, en el que ejecuto una instancia de MongoDB. También construyo mi servicio con un archivo docker-compose.yml como se muestra a continuación

 version: "3" services: myApp: image: myApplication ports: - "8080:8080" environment: SPRING_DATA_MONGODB_URI: mongodb://localhost:27017/myAppDb

Cuando ejecuto docker-compose up para iniciar el contenedor, puedo acceder a mi servicio desde mi computadora a través de xxxx:8080

Pero el problema es que mi servicio no puede conectarse a mongoDB en localhost:27017, porque no están en la misma red. Por lo tanto, agrego la opción network_mode: "host" a mi archivo docker-compose. Resuelve el problema, mi servicio puede conectarse a mongoDB que se ejecuta en mi servidor. Sin embargo, ya no puedo acceder a mi servicio a través de xxxx:8080

Mi pregunta:

¿Cómo puedo seguir conectándome a mi servicio a través de xxxx:80 con la opción network_mode: "host" ? ¿O hay alguna forma de que no necesite usar esa opción, pero mi servicio aún puede conectarse a la instancia de mongoDB?

Nota: La instancia de MongoDB se instala de forma tradicional (yum install mongodb-org) y se configura de manera que solo se pueda acceder a ella a través de localhost:27017 (o 127.0.0.1:27107). No sé por qué ni cómo, pero es así, por lo que no puedo cambiar la cadena de conexión a mongodb://xxxx:27017. Simplemente no funcionará.

También sé que puedo agregar mongodb como un servicio en el archivo docker-compose para lograr mi objetivo, pero no quiero hacerlo porque, en mi caso, es mejor administrar la base de datos por separado.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que la única salida es ejecutar el contenedor myApp en modo host . En este modo, se debe poder acceder al servicio en la dirección IP del host en el puerto 8080 . Si no es así, lo más probable es que se deba a problemas con el cortafuegos.

Se puede acceder al mismo servicio en el modo de red bridge , ya que en este modo, Docker manipula las reglas de iptables para brindar acceso a los contenedores. Más información aquí .

En su caso específico, la ventana acoplable agrega una regla NAT para reenviar el tráfico entrante en el puerto 8080 en el host al puerto 8080 en el contenedor. Ejecutando iptables

 iptables -t nat -L

debe dar salida a la regla:

 Chain POSTROUTING (policy ACCEPT) MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:http-alt ... Chain DOCKER (2 references) DNAT tcp -- anywhere anywhere tcp dpt:http-alt to:172.17.0.2:8080

donde 172.17.0.2 es la IP del contenedor.

El problema está en el modo host , donde los puertos de publicación se descartan y la ventana acoplable no agrega ninguna regla para permitir el tráfico entrante a través del puerto 8080 . Tienes que agregar la regla tú mismo.

Espero eso ayude.

over 4 years ago · Santiago Trujillo Denunciar

0

Experimenté algo similar, pero no usé docker-compose, pero creo que podría aplicar el mismo método.

En lugar de usar el host, creará su propia red puente ( https://docs.docker.com/network/bridge/ ), y luego creo que su servicio debería poder acceder a mongodb, y debería poder acceda a mongodb también :)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda