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

Ambiente em Docker

Amigos, estou tentando criar um ambiente em Docker para fazer os exercícios do curso, mas estou falhando miseravelmente. Meu Tomcat sobe, mas não encontra a aplicação. Alguém tem um exemplo de como eu poderia fazer isso?

6 respostas
solução!

Talvez seja melhor eu mostrar o que estou fazendo. Estou seguindo um exemplo que encontrei neste artigo:

https://medium.com/@bishwas.scholar/java-servlet-with-docker-eac1ac6a87b

Meu Dockerfile:

FROM tomcat:9
COPY ./app /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]

Meu docker-compose.yml:

version: '3'
services:
  api:
    image: webapp
    restart: always
    build:
        context: .
    volumes:
      - ./app:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"

Claramente, estou fazendo algo errado, mas não consegui identificar o quê.

Olá Vinícius! Tudo bem?

Que legal que você está tentando criar um ambiente em Docker para fazer os exercícios do curso! Realmente, pode ser um pouco complicado no começo, mas com um pouco de prática, você vai conseguir.

Quando você diz que o Tomcat sobe, mas não encontra a aplicação, pode ser que haja algum problema na configuração do Docker ou na configuração do Tomcat. Seria interessante verificar se o Docker está mapeando corretamente as portas para o Tomcat e se a aplicação está sendo implantada corretamente no Tomcat.

Uma dica que pode ajudar é utilizar o Docker Compose, que permite definir e executar aplicativos Docker com vários contêineres. Dessa forma, você pode definir a configuração do Tomcat e da aplicação em um arquivo YAML e executá-lo com um único comando.

Aqui está um exemplo de um arquivo docker-compose.yml para um ambiente com Tomcat e uma aplicação Java:

version: '3'
services:
  tomcat:
    image: tomcat:9.0
    ports:
      - "8080:8080"
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
  app:
    build: .
    ports:
      - "8081:8080"
    volumes:
      - ./app:/usr/local/tomcat/webapps/app

Nesse exemplo, o Tomcat está sendo executado na porta 8080 e a aplicação está sendo executada na porta 8081. O diretório "webapps" é mapeado para o diretório correspondente no contêiner do Tomcat e o diretório "app" é mapeado para o diretório correspondente no contêiner da aplicação.

Espero que essa dica ajude! Se ainda tiver dúvidas, não hesite em perguntar.

Espero ter ajudado e bons estudos!

Otávio, obrigado por me ajudar! Modifiquei meu docker-compose.yml conforme sua sugestão, e ficou assim:

version: '3'
services:
  tomcat:
    image: tomcat:9.0
    ports:
      - "8080:8080"
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
  app:
    build: .
    ports:
      - "8081:8080"
    volumes:
      - ./app:/usr/local/tomcat/webapps

Mas continuo com o mesmo erro no navegador:

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

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

Você está mapeando o diretório local "webapps" para o diretório correspondente no contêiner do Tomcat, o que significa que o Tomcat irá buscar a sua aplicação Java nesse diretório. Sua aplicação Java está nesse diretório? Confirma se os arquivos da sua aplicação estão no diretório "webapps" do contêiner do Tomcat

Pior que estão!

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

Vou para o meu plano B, montar o ambiente em uma VM Ubuntu. Obrigado, Otávio!