Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Spring Boot + docker-compose + MySQL:Conexão recusada


A composição do Docker sempre inicia e interrompe os contêineres em ordem de dependência ou ordem sequencial no arquivo, se não for fornecida. Mas o docker-compose não garante que ele aguardará até que o contêiner de dependência esteja em execução. Você pode referir aqui para mais detalhes. Então o problema aqui é que seu banco de dados não está pronto quando seu spring-mysql container tenta acessar o banco de dados. Portanto, a solução recomendada é usar espere por isso.sh ou script semelhante para envolver seu spring-mysql aplicativo iniciando ENTRYPOINT .

Por exemplo, se você usar wait-for-it.sh seu ENTRYPOINT no seu Dockerfile deve mudar para o seguinte após copiar o script acima para a raiz do seu projeto:
ENTRYPOINT ["./wait-for-it.sh", "db:3306", "--", "java", "-jar", "app.jar"]

E duas outras coisas importantes a considerar aqui são:
  • Não use links, eles estão obsoleto você deve usar a rede definida pelo usuário. Todos os serviços no arquivo docker-compose estarão em uma única rede definida pelo usuário se você não definir explicitamente nenhuma rede. Então você só precisa remover os links do arquivo de composição.
  • Você não precisa publicar a porta para o contêiner docker se apenas usá-la dentro da rede definida pelo usuário.