sql >> Database >  >> RDS >> Mysql

Spring Boot + docker-compose + MySQL:verbinding geweigerd

Docker compose start en stopt containers altijd in afhankelijkheidsvolgorde, of sequentiële volgorde in het bestand als deze niet is opgegeven. Maar docker-compose garandeert niet dat het zal wachten tot de afhankelijkheidscontainer wordt uitgevoerd. U kunt verwijzen hier voor meer details. Het probleem hier is dus dat uw database niet gereed is wanneer uw spring-mysql container probeert toegang te krijgen tot de database. De aanbevolen oplossing is dus dat u kunt gebruiken wait-for-it.sh of soortgelijk script om uw spring-mysql . in te pakken app start ENTRYPOINT .

Als voorbeeld als u wait-for-it.sh . gebruikt uw ENTRYPOINT in je Dockerfile zou moeten veranderen in het volgende na het kopiëren van het bovenstaande script naar de hoofdmap van je project:

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

En twee andere belangrijke dingen om te overwegen zijn:

  • Gebruik geen links, deze zijn verouderd in plaats daarvan moet u een door de gebruiker gedefinieerd netwerk gebruiken. Alle services in het docker-compose-bestand bevinden zich in een door de gebruiker gedefinieerd netwerk als u niet expliciet een netwerk definieert. Je hoeft dus alleen maar de links uit het samengestelde bestand te verwijderen.
  • U hoeft de poort voor de docker-container niet te publiceren als u deze alleen binnen het door de gebruiker gedefinieerde netwerk gebruikt.


  1. Meerdere pagina's maken op basis van sql-query

  2. Hoe de IDENTITY()-functie in SQL Server te gebruiken?

  3. Waarschuwing:mysql_result() [function.mysql-result]:kan niet naar rij 0 springen op MySQL-resultaatindex 5 in profile.php op regel 11

  4. Hoe voeg ik een byte [] in een SQL Server VARBINARY-kolom in?