1
resposta

Erro docker-compose

Durante a execução do do comando: docker-compose up, o Terminal me devolve essa mensagem de falha, ao tentar conectar com o endpoint de "topicos"

proxy-forum-api | 2022/09/12 21:44:14 [error] 32#32: *1 connect() failed (113: No route to host) while connecting to upstream, client: 192.168.48.3, server: _, request: "GET /topicos HTTP/1.1", upstream: "http://192.168.32.2:8080/topicos", host: "proxy-forum-api"

Acessando o endereço: localhost/topicos Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olhando para o Prometheus na aba de Targets Insira aqui a descrição dessa imagem para ajudar na acessibilidadeComo posso resolver este problema?

1 resposta

Oi, Matheus. Tudo bem?

Matheus, a mensagem diz que não existe rota de comunicação configurada/estabelecida entre o Prometheus e a aplicação.

Você esta utilizando o arquivo docker-compose.yaml que esta disponibilizado para download no capitulo dessa aula ou esta trabalhando com um arquivo que foi desenvolvido no decorrer do curso?

A aplicação esta acessível via Proxy? Se sim, valide a exposição de métricas acessando a rota abaixo:

http://localhost/metrics

Verifique se seu docker-compose.yaml esta exatamente com estas configurações:

version: '3'

networks:
  database:
    internal: true
  cache:
    internal: true
  api:
    internal: true
  monit:
  proxy:

services:
  redis-forum-api:
    image: redis
    container_name: redis-forum-api
    restart: unless-stopped
    expose:
      - 6379
    networks:
      - cache

  mysql-forum-api:
    image: mysql:5.7
    container_name: mysql-forum-api
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: 'forum'
      MYSQL_USER: 'forum'
      MYSQL_PASSWORD: 'Bk55yc1u0eiqga6e'
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_ROOT_HOST: '%'
    volumes:
      - ./mysql:/docker-entrypoint-initdb.d
    expose:
      - 3306
    networks:
      - database
    depends_on:
      - redis-forum-api

  app-forum-api:
    build:
      context: ./app/
      dockerfile: Dockerfile
    image: app-forum-api
    container_name: app-forum-api
    restart: unless-stopped
    networks:
      - api
      - database
      - cache
    depends_on:
      - mysql-forum-api
    healthcheck:
      test: "curl -sS http://app-forum-api:8080/actuator/health"
      interval: 1s
      timeout: 30s
      retries: 60

  proxy-forum-api:
    image: nginx
    container_name: proxy-forum-api
    restart: unless-stopped
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/proxy.conf:/etc/nginx/conf.d/proxy.conf
    ports:
      - 80:80
    networks:
      - proxy
      - api
    depends_on:
      - app-forum-api

  prometheus-forum-api:
    image: prom/prometheus:latest
    container_name: prometheus-forum-api
    restart: unless-stopped
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--web.enable-lifecycle'
    ports:
      - 9090:9090
    networks:
      - monit
      - api
    depends_on:
      - proxy-forum-api

Após validar o docker-compose, caso não encontre nada diferente, faça a validação das mudanças no application.properties do conteiner da aula anterior e refaça o build da aplicação por desencargo de consciência.

As mudanças no arquivo application.properties foram nos seguintes blocos:

# Redis cache config 
spring.cache.type=redis
spring.redis.host=redis-forum-api
spring.redis.port=6379

# datasource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql-forum-api:3306/forum
spring.datasource.username=forum
spring.datasource.password=Bk55yc1u0eiqga6e

# Actuator
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=health,info,metrics,prometheus

# Prometheus
management.metrics.enable.jvm=true
management.metrics.export.prometheus.enabled=true
management.metrics.distribution.sla.http.server.requests=50ms,100ms,200ms,300ms,500ms,1s
management.metrics.tags.application=app-forum-api

Assegure-se de que o build seja executado com estas configurações, estando no diretório/pasta da aplicação e rodando o comando abaixo no terminal:

mvn clean package

É importante validar se o build da aplicação foi executado com as alterações feitas na aula anterior, para assegurar que a aplicação esteja encontrando o Redis e o MySQL conteinerizados, para sabermos sobre que a configuração esta válida, faça uma verificação no estado do conteiner da aplicação, via terminal:

Em ambientes Linux ou MacOs (Shell Bash)

docker container ps | grep app-forum-api

Em ambientes Windows (CMD)

docker container ps | findstr app-forum-api

Aguardo seu retorno para saber se o problema foi solucionado ou não.

Abraços.