Ich führe eine Spring-Boot-Anwendung mit Docker-Schwarm aus und verwende Postgres für die Datenbank. Wenn ich beide als Docker-Dienst ausführe, schlägt die Datenbankverbindung konsistent und zufällig fehl (wie Sie auf dem Zeitstempel sehen können), wie im Protokoll angegeben:
2017-10-26T 17:14:15 .200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: Daten vom Client konnten nicht empfangen werden: Verbindung durch Peer zurückgesetzt
2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: Daten vom Client konnten nicht empfangen werden: Verbindung durch Peer zurückgesetzt
2017-10-26T 17:43:56 .954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: Daten vom Client konnten nicht empfangen werden: Verbindung durch Peer zurückgesetzt
2017-10-26T 17:44:17 .434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: Daten vom Client konnten nicht empfangen werden: Verbindung durch Peer zurückgesetzt
2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: Daten vom Client konnten nicht empfangen werden: Verbindung durch Peer zurückgesetzt
Ich konnte den Grund dafür nicht verstehen oder entdecken. Ich würde mich über Ideen freuen.
bearbeiten:
Wir haben festgestellt, dass beim Testen der Anwendung auch der folgende Fehler auftritt:
SQLTransientConnectionException: HikariPool-1 - Verbindung ist nicht verfügbar, Zeitüberschreitung der Anforderung nach 937517 ms
Vielen Dank.
quelle
tcp_keepalive_time
vom Host (Quelle: success.docker.com/article/ipvs-connection-timeout-issue ), sodass dieser Ansatz mit neueren Containern nicht mehr funktioniert. Ab Docker 19.03 gibt es jedoch einesysctl
Option, die für Dienste bereitgestellt werden kann (z. B. in einer Erstellungsdatei). Dies kann verwendet werden, um die oben genannten Flags direkt in den Containern zu setzen, ohne den Host zu beeinträchtigen. docs.docker.com/compose/compose-file/#sysctlsEs gibt eine andere Möglichkeit, das Schließen der Leerlaufverbindung zu verhindern. Das Problem hängt mit der Standarderkennung des Schwarmdienstes zusammen, bei der die Leerlaufverbindung nach 15 Minuten geschlossen wird.
Explizit angegeben, der
dnsrr
Endpunktmodus behebt das Problem, z.quelle