Mysql
 sql >> Database >  >> RDS >> Mysql

Spring Boot + composizione mobile + MySQL:connessione rifiutata

Docker Compose avvia e interrompe sempre i contenitori in ordine di dipendenza o in ordine sequenziale nel file se non specificato. Ma docker-compose non garantisce che aspetterà fino a quando il contenitore delle dipendenze sarà in esecuzione. Puoi fare riferimento qui per ulteriori dettagli. Quindi il problema qui è che il tuo database non è pronto quando il tuo spring-mysql container tenta di accedere al database. Quindi, la soluzione consigliata è che potresti usare wait-for-it.sh o uno script simile per avvolgere il tuo spring-mysql app che inizia con ENTRYPOINT .

Ad esempio se usi wait-for-it.sh il tuo ENTRYPOINT nel tuo Dockerfile dovrebbe cambiare in seguito dopo aver copiato lo script sopra nella radice del tuo progetto:

ENTRYPOINT ["./wait-for-it.sh", "db:3306", "--", "java", "-jar", "app.jar"]

E altre due cose importanti da considerare qui sono:

  • Non utilizzare link, sono obsoleto dovresti invece usare la rete definita dall'utente. Tutti i servizi nel file di composizione Docker saranno in una singola rete definita dall'utente se non si definisce esplicitamente alcuna rete. Quindi devi solo rimuovere i collegamenti dal file di composizione.
  • Non è necessario pubblicare la porta per il contenitore docker se la utilizzi solo all'interno della rete definita dall'utente.