sql >> Databáze >  >> RDS >> Mysql

Spring Boot + docker-compose + MySQL:Připojení odmítnuto

Docker compose vždy spouští a zastavuje kontejnery v pořadí závislosti nebo sekvenčním pořadí v souboru, pokud není zadáno. Ale docker-compose nezaručuje, že počká, dokud se kontejner závislostí nespustí. Můžete odkázat zde pro další podrobnosti. Problém je tedy v tom, že vaše databáze není připravena, když váš spring-mysql kontejner se pokusí o přístup k databázi. Takže doporučeným řešením je, že byste mohli použít wait-for-it.sh nebo podobný skript pro zabalení vašeho spring-mysql aplikace začínající ENTRYPOINT .

Jako příklad použijete wait-for-it.sh váš ENTRYPOINT ve vašem Dockerfile by se měl po zkopírování výše uvedeného skriptu do kořenového adresáře vašeho projektu změnit na následující:

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

A dvě další důležité věci, které je třeba zvážit, jsou:

  • Nepoužívejte odkazy, jsou zastaralé měli byste místo toho použít uživatelsky definovanou síť. Všechny služby v souboru docker-compose budou v jedné uživatelem definované síti, pokud žádnou síť explicitně nedefinujete. Takže stačí odstranit odkazy z nového souboru.
  • Není nutné publikovat port pro kontejner dockeru, pokud jej používáte pouze v rámci uživatelem definované sítě.


  1. Mechanismy pro sledování změn schématu DB

  2. Musím použít mysql_real_escape_string, když vážím parametry?

  3. Proč jsou UNION dotazy v MySQL tak pomalé?

  4. Otázky, které je třeba si položit před spuštěním databáze