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

262
Vistas
Docker Compose: servicios externos simulados

tengo la siguiente situacion:

Mi aplicación consta de un único servicio web que llama a una API externa (digamos, algún servicio SaaS, ElasticSearch o algo así). Para fines que no sean de prueba unitaria, queremos controlar el servicio externo y luego también inyectar fallas. La aplicación y la API "simulada" están dockerizadas y ahora quiero usar docker-compose para activar todos los contenedores.

Debido a que la aplicación tiene varias direcciones codificadas (por ejemplo, el nombre de host de los servicios externos), no puedo cambiarlas y debo solucionarlo.

El contenedor de service realiza una llamada a http://external-service.com/getsomestuff .

Mi idea era usar algunas funciones proporcionadas por Docker para redirigir todo el tráfico saliente al http://external-service.com/getsomestuff externo al contenedor simulado sin cambiar la URL.

Mi docker-compose.yaml se ve así:

 version: '2' services: service: build: ./service container_name: my-service1 ports: - "5000:5000" command: /bin/sh -c "python3 app.py" api: build: ./api-mock container_name: my-api-mock ports: - "5001:5000" command: /bin/sh -c "python3 app.py"

Finalmente, tengo un controlador que solo hace lo siguiente:

 curl -XGET localhost:5000/ curl -XPUT localhost:5001/configure?delay=10 curl -XGET localhost:5000/

donde el segundo curl simplemente establece el retraso en el simulacro en 10 segundos.

Hay varias opciones que he considerado:

  • Usando iptables -fu (requeriría modificar Dockerfiles para instalarlo)
  • Uso de redes docker (esto no está muy claro para mí)

¿Hay alguna opción simple para lograr lo que quiero?

Editar :

Para mayor claridad, aquí está la parte relevante del código de service :

 import requests @app.route('/') def do_stuff(): r = requests.get('http://external-service.com/getsomestuff') return process_api_response(r.text())
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Docker ejecuta un servidor DNS interno para redes definidas por el usuario. Cualquier búsqueda de host desconocido se reenvía a sus servidores DNS normales.

Los archivos de composición de la versión 2+ crearán automáticamente una red para que la utilice la composición, por lo que hay varias formas de controlar los nombres de host que resuelve.

La forma más sencilla es nombrar su contenedor con el nombre de host:

 version: "2" services: external-service.com: image: busybox command: sleep 100 ping: image: busybox command: ping external-service.com depends_on: - external-service.com

Si desea mantener los nombres de los contenedores, puede usar links

 version: "2" services: api: image: busybox command: sleep 100 ping: image: busybox links: - api:external-service.com command: ping external-service.com depends_on: - api

O alias de red

 version: "2" services: api: image: busybox command: sleep 100 networks: pingnet: aliases: - external-service.com ping: image: busybox command: ping external-service.com depends_on: - api networks: - pingnet networks: pingnet:
about 4 years ago · Santiago Trujillo Denunciar

0

Pude resolver esto con -links, ¿hay alguna forma de hacer redes en docker-compose?

versión: '3'

servicios:

 MOCK: image: api-mock:latest container_name: api-mock-container ports: - "8081:80" api: image: my-service1:latest links: - MOCK:external-service.com
about 4 years ago · Santiago Trujillo Denunciar

0

No tengo del todo claro cuál es el problema que está tratando de resolver, pero si está tratando de hacer que external-service.com dentro del contenedor dirija el tráfico a su servicio "simulado", creo que debería poder hacerlo eso usando la directiva extra_hosts en su archivo docker-compose.yml . Por ejemplo, si tengo esto:

 version: "2" services: example: image: myimage extra_hosts: - google.com:172.23.254.1

Eso dará como resultado /etc/hosts en el contenedor que contiene:

 172.23.254.1 google.com

Y los intentos de acceder a http://google.com llegarán a mi servidor web en 172.23.254.1.

about 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