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

292
Vistas
Solicitud de HttpClient en el contenedor acoplable en red

Soy nuevo en los contenedores docker y me encuentro con el siguiente problema. Estoy desarrollando una página web que realiza solicitudes a una API expuesta. Ambos se publican en distintos contenedores que se enlazan a través de una red. Este es mi archivo docker-compose.yml:

 version: '2' services: api: image: my/api networks: - api ports: - "8080:5000" container_name: api web: build: context: ./DockerWeb networks: - api ports: - "80:5000" container_name: web networks: api: driver: bridge

He notado que si me adjunto al contenedor que ejecuta mi página web, puedo hacer ping al contenedor api sin ningún problema usando ping api

El problema surge al intentar realizar cualquier llamada de servicio web al contenedor API. Estoy tratando de inicializar un objeto HttpClient, sin embargo, la propiedad BaseAddress de dicho objeto debe establecerse en un Uri válido.

 _client = new HttpClient(); _client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"

Esto arroja el siguiente error

UriFormatException: URI no válido: no se pudo determinar el formato del URI.

¿Hay alguna manera de a) Exponer el nombre del contenedor de una manera diferente o b) hacer una llamada a un servicio web sin la necesidad de usar un URI? ¿Cómo puedo lograr esto?

ACTUALIZAR

Actualicé ApiUrl para que contenga el valor http:api:8080 , sin embargo, ahora recibo una excepción al realizar la llamada

System.AgregateException: se produjeron uno o más errores. (Se produjo un error al enviar la solicitud). ---> System.Net.Http.HttpRequestException: se produjo un error al enviar la solicitud. ---> System.Net.Http.CurlException: no se pudo conectar al servidor

También probé llamar al punto final de API directamente desde mi contenedor web usando wget

 wget http://api:8080/

Sin embargo, sigo recibiendo un error:

Conectando a api (api)|172.24.0.4|:8080... falló: Conexión rechazada

¿Podría ser esto un error de configuración de la API?

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

0

api es solo el nombre de host. El URI sería http://api:8080 (o https://api:someotherport si configura SSL/TLS).

over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay 2 tipos de comunicación:

Web de contenedor > API de contenedor

En este caso, de hecho, puede usar el nombre de host "api" para conectarse a su API. Esto es lo que tendría que hacer si su html se genera del lado del servidor.

Cliente web > API de contenedor

Aquí, sin embargo, supongo que está utilizando algún tipo de aplicación web JavaScript (Angular u otra). En ese caso, el html (y la llamada) no se realiza desde el contenedor web sino directamente desde su navegador web.

Entonces, en ese caso, debe usar http://localhost:8080 (supongo que Docker se está ejecutando en su máquina local).

Espero que ayude

over 4 years ago · Santiago Trujillo Denunciar

0

El puerto interno se utiliza para conexiones dentro de la red docker. Entonces, en este caso, la solicitud debe ir a http://api:5000

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