sql >> Databasteknik >  >> RDS >> Mysql

Spring Boot + docker-compose + MySQL:Anslutningen nekades

Docker compose startar och stoppar alltid behållare i beroendeordning, eller sekventiell ordning i filen om den inte anges. Men docker-compose garanterar inte att det kommer att vänta tills beroendebehållaren körs. Du kan refera här för mer information. Så problemet här är att din databas inte är redo när din spring-mysql container försöker komma åt databasen. Så den rekommenderade lösningen är att du kan använda wait-for-it.sh eller liknande skript för att omsluta din spring-mysql app som startar ENTRYPOINT .

Som exempel om du använder wait-for-it.sh din ENTRYPOINT i din Dockerfil bör ändras till följande efter att ha kopierat ovanstående skript till din projektrot:

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

Och två andra viktiga saker att tänka på här är:

  • Använd inte länkar de är utfasade du bör använda användardefinierat nätverk istället. Alla tjänster i docker-compose-filen kommer att vara i ett enda användardefinierat nätverk om du inte uttryckligen definierar något nätverk. Så du behöver bara ta bort länkarna från skrivfilen.
  • Du behöver inte publicera porten för dockercontainer om du bara använder den inom det användardefinierade nätverket.


  1. Hur man installerar och säkrar MariaDB på Debian 9

  2. Mysql sträng delad

  3. SQL Hjälp | Selectlistan för INSERT-satsen innehåller färre objekt än infogningslistan

  4. Fråga för att få lägsta värde som är större än noll och är inte NULL