Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Docker-compose up

Boa noite, galera! Compartilhando com vocês a resolução dos problemas.

Neste projeto constei 2 problemas. Um referente ao .jar faltando e outro referente ao banco de dados. Vou mostrar os problemas, explicando o porque e a resolução!

Problema 1: Projeto sem o .jar

Ao executar o comando docker-compose up ele consta o primeiro problema ao copiar o .jar Erro ao copiar .jar

Isso acontece pois o projeto não foi compilado e não foi gerado um novo .jar. Quando executamos o docker-compose, o container não consegue encontrar e exibe o erro.

ANTES: Ajustar no application-prod.properties as seguintes configurações para que não dê erro ao localizar banco dentro do docker:

spring.redis.host=redis-forum-api

spring.datasource.url=jdbc:mysql://mysql-forum-api:3306/forum

Solução: Basta dar um mvn clean package para que o projeto seja buildado e gerado um novo jar na pasta Target

Estou usando o IntelliJ, mas pode ser por onde estiver mais acostumado.

geração de novo jar

Com o projeto perfeitamente compilado e com o Jar gerado, podemos executar novamente o comando: docker-compose up -d

docker up

Problema 2: Bad Request ao tentar acessar http://localhost/topicos

Ao acessar o endereço o seguinte erro é apresentado:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Para ver mais detalhes do que aconteceu, precisamos acessar os logs da aplicação de api! Para isso, basta usar o comando: docker container logs app-forum-api Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAnalisando os logs, percebemos que a tabela topico não existe!

Olhando a pasta aula_3/mysql, foi notado que não existe um arquivo .sql. Por isso o banco não foi gerado! No projeto anterior o arquivo existia, e por conta disso, não houve problemas.

Solução: Copiar arquivo database.sql do projeto anterior, que se encontra na pasta prometheus-grafana\mysql, para a pasta do projeto atual, em aula_3/mysql.

Agora precisamos parar o projeto com o comando docker-compose down Apagar TODAS as imagens geradas para evitar possível sujeira: docker rmi -f $(docker images -qa) CUIDADO: comando remove TODAS as imagens! Executar o docker compose novamente para gerar novas imagens: docker-compose up -d

Feito! Com isso o projeto funciona corretamente

Tudo certo agora!!!

Espero ter ajudado, galerinha! E até uma próxima!

3 respostas
solução!

Oi Cleiton, tudo bem?

Agradeço muito por compartilhar sua experiência detalhada e com certeza sua contribuição vai ser valiosa para outros estudantes.

Parabéns pela atitude.

Um abraço e bons estudos.

Fala Cleiton! Muito obrigado pela sua ajuda! Seu post foi essencial, e graças a ele, consegui fazer os ajustes necessários para que tudo funcionasse por aqui.

Gostaria de acrescentar um detalhe importante. Após seguir o procedimento que você descreveu, obtive sucesso, no entanto, percebi que o contêiner do Prometheus estava reiniciando. Ao verificar o log do contêiner, encontrei a seguinte mensagem:

goroutine 1 [running]:
github.com/prometheus/prometheus/promql.NewActiveQueryTracker({0x7fff1e2d7ef7, 0xb}, 0x14, {0x3e94bc0, 0xc000855bd0})
        /app/promql/query_logger.go:123 +0x411
main.main()
        /app/cmd/prometheus/main.go:645 +0x7812
ts=2023-12-23T03:09:25.211Z caller=main.go:539 level=info msg="No time or size retention was set so using the default time retention" duration=15d
... (outros logs)
ts=2023-12-23T03:09:25.211Z caller=query_logger.go:93 level=error component=activeQueryTracker msg="Error opening query log file" file=/prometheus/queries.active err="open /prometheus/queries.active: permission denied"
panic: Unable to create mmap-ed active query log

O contêiner estava enfrentando problemas de permissão para criar o arquivo de log, e a solução que encontrei foi alterar a definição do contêiner Prometheus no arquivo docker-compose da seguinte forma:

prometheus-forum-api:
  image: prom/prometheus:latest
  container_name: prometheus-forum-api
  restart: unless-stopped
  user: root
  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

Ao adicionar o usuário root, consegui resolver os problemas de permissão e o contêiner do Prometheus passou a funcionar corretamente. Não tenho certeza se esta é a prática mais recomendada, mas foi a solução que melhor se adequou ao meu caso.

Agradeço novamente pela sua ajuda e espero que esse detalhe possa ajudar os outros também!

Muito Obrigado Cleiton Marques, ajudou demais!!!