2
respostas

[Dúvida] Docker: Comunicação entre duas APIs .net

Ola, estou tentando fazer a comunicação entre duas APIs .net por dentro do container do docker. Eu estou subindo as duas APIs mais o banco de dados atraves do docker-compose, eu consigo acessar as duas APIs individualmente mas quando eu tento enviar os dados de uma para para outra atraves da rota da primeira API para a segunda da o erro abaixo Insira aqui a descrição dessa imagem para ajudar na acessibilidadeEu construi o docker-compose da seguinte forma

services:
  restaurante_api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_HTTP_PORTS=4000
      - ASPNETCORE_HTTPS_PORTS=4001
    container_name: restauranteapi
    image: ${DOCKER_REGISTRY-}restauranteapi
    build:
      context: .
      dockerfile: Restaurante_Api/Dockerfile
    ports:
      - "4000:4000"
      - "4001:4001"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
    networks:
      - restaurante-bridge 
    links:
      - itemservice_api  
    depends_on:
      sqlserver:
        condition: service_healthy
    image: mcr.microsoft.com/mssql/server:2022-preview-ubuntu-22.04
    container_name: sqlserver   
    ports:
      - "1433:1433"
    environment:
      - SA_PASSWORD=leoQueres123
      - ACCEPT_EULA= Y       
    volumes:
      - ${APPDATA}/sqlserverrestaurante/data:/var/opt/mssql/data
      - ${APPDATA}/sqlserverrestaurante/log:/var/opt/mssql/log   
    networks:
      - restaurante-bridge 
    healthcheck:
      test: /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "leoQueres123" -Q "SELECT 1" -b -o /dev/null
      interval: 10s
      timeout: 3s
      retries: 10
      start_period: 10s 

  itemservice_api: 
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_HTTP_PORTS=5000
      - ASPNETCORE_HTTPS_PORTS=5001
    container_name: itemserviceapi
    image: ${DOCKER_REGISTRY-}itemserviceapi
    build:
      context: .
      dockerfile: ItemService_Api/Dockerfile
    ports:
      - "5000:5000"
      - "5001:5001"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
    networks:
      - restaurante-bridge
    depends_on:
      sqlserver:
        condition: service_healthy

networks:
  restaurante-bridge:
    driver: bridge

Dockerfile de cada aplicação Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguem consegue me ajudar a entender esse problema. Já fiz tudo que podia e nao consigo resolver.

2 respostas

Olá Leonardo, como vai?

O erro "Connection refused" geralmente ocorre quando o serviço não está acessível no endereço ou porta especificada. Aqui estão algumas sugestões para resolver o problema:

  1. Verifique o Nome do Serviço:

    • No Docker, os serviços podem se comunicar usando os nomes dos serviços definidos no docker-compose.yml. Certifique-se de que a URL que você está usando para se comunicar com a itemservice_api está correta. Em vez de https://itemservice_api/api/Item, tente http://itemservice_api:5000/api/Item.
  2. Protocolo HTTP/HTTPS:

    • Certifique-se de que está usando o protocolo correto. Se você não configurou HTTPS nas suas APIs, use HTTP.
  3. Portas:

    • Verifique se as portas estão corretamente configuradas e expostas. No seu caso, a itemservice_api está configurada para usar a porta 5000 para HTTP.
  4. Rede:

    • Ambos os serviços estão na mesma rede restaurante-bridge. Isso é bom, pois permite que eles se comuniquem entre si. Certifique-se de que não há problemas de configuração na rede.
  5. Logs e Testes:

    • Verifique os logs dos containers para ver se há mais detalhes sobre o erro.
    • Tente acessar a API diretamente de dentro do container do restauranteapi usando curl ou outro cliente HTTP para verificar a conectividade.

Espero que com essas dicas você consiga resolver a comunicação entre as API's.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Ola, tentei todas as sugestões na minha aplicação mais infelizmente nada funcionou. Eu coloquei minha aplicação no github para caso alguem queira baixar e analisar o codigo, https://github.com/LeonardoQueres/Docker_.NET_RabbitMq_SQLSERVER