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

É possível usar o IntelliJ no Windows e Docker no WSL2 - Ubuntu ?

Olá,

Por questões de performance, instalei o Projeto Forum (código fornecido da Aula1 no início da Aula2) no ambiente Windows, onde o IntelliJ 2023.2.5 está instalado. Em relação ao banco de dados, subi o Docker do MySQL 8.0.28, conforme especificações passadas ao final da Aula 1 e criei o BD forum.

Docker MySQL executando no WSL2-Ubuntu-22.04

Ao subir a aplicação forum, via IntelliJ, ocorreram vários erros, iniciando com os erros abaixo:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829) ~[mysql-connector-java-8.0.28.jar:8.0.28]

Minhas dúvidas: . É possível fazer este tipo de mapeamento (aplicação no ambiente Windows acessando o Docker do MySQL no ambiente WSL2-Ubuntu) ? . Se for possível, o que devo fazer ? Trocar o localhost por um IP para acessar o Docker ? Se for isso, como obtenho este IP ?

Fico no aguardo e desde já agradeço!

2 respostas
solução!

Sim, é possível fazer a aplicação no ambiente Windows acessar um banco de dados MySQL em um ambiente Docker no WSL2-Ubuntu. O problema que você está enfrentando está relacionado à autenticação no MySQL.

Para corrigir o erro "java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)", você pode seguir estas etapas:

  1. Verificar as Credenciais: Certifique-se de que as credenciais (usuário e senha) no arquivo de configuração da sua aplicação estão corretas. Parece que a aplicação está tentando conectar-se ao MySQL usando o usuário 'root' e uma senha, e a autenticação está falhando.

  2. Permitir Acesso Remoto ao MySQL: Por padrão, o MySQL pode permitir apenas conexões locais. Para permitir conexões remotas, você precisa configurar o MySQL para aceitar conexões do host em que sua aplicação está sendo executada. Execute o seguinte comando no MySQL:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sua_senha' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    Isso concede privilégios ao usuário 'root' de qualquer host ('%'). Certifique-se de substituir 'sua_senha' pela senha real.

  3. Configurar o Bind Address: Edite o arquivo de configuração do MySQL (normalmente my.cnf ou my.ini) no seu contêiner Docker e certifique-se de que o bind-address está configurado para aceitar conexões externas:

    bind-address = 0.0.0.0
    

    Isso permite que o MySQL escute em todas as interfaces de rede.

  4. Verificar o Firewall: Certifique-se de que o firewall no WSL2-Ubuntu ou no Windows está permitindo conexões na porta do MySQL (por padrão, a porta é 3306).

  5. Configurar o IP no IntelliJ: No IntelliJ, ao configurar a conexão com o banco de dados, use o endereço IP do seu host WSL2-Ubuntu em vez de "localhost". Você pode obter o IP do WSL2 executando o seguinte comando no PowerShell do Windows:

    wsl hostname -I
    

    Substitua "localhost" pelo endereço IP retornado.

Certifique-se de reiniciar o contêiner Docker após fazer essas alterações. Depois disso, tente executar novamente sua aplicação no IntelliJ. Se você ainda encontrar problemas, verifique os logs do MySQL para obter mais detalhes sobre as falhas de autenticação.

Muito Obrigado pela resposta bem completa. Com suas dicas, conseguirei fazer testes em vários projetos que não estava conseguindo configurar. Valeu!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software