J'utilise une application Spring Boot avec Docker Swarm et j'utilise PostgreSQL comme base de données. Lorsque je les exécute tous les deux en tant que service docker, la connexion à la base de données échoue de manière cohérente et aléatoire (comme vous pouvez le voir sur l'horodatage) comme le journal le dit:
2017-10-26T 17:14:15 .200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: impossible de recevoir des données du client: réinitialisation de la connexion par l'homologue
2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: impossible de recevoir des données du client: réinitialisation de la connexion par l'homologue
2017-10-26T 17:43:56 .954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: impossible de recevoir des données du client: réinitialisation de la connexion par l'homologue
2017-10-26T 17:44:17 .434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: impossible de recevoir des données du client: réinitialisation de la connexion par l'homologue
2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: impossible de recevoir des données du client: réinitialisation de la connexion par l'homologue
Je ne pouvais pas comprendre ou découvrir la raison de cela. J'apprécierais toutes les idées.
Éditer:
nous avons réalisé que lors du test de l'application, il génère également une erreur comme celle-ci:
SQLTransientConnectionException: HikariPool-1 - La connexion n'est pas disponible, la demande a expiré après 937517ms
Merci.
la source
tcp_keepalive_time
de l'hôte (source: success.docker.com/article/ipvs-connection-timeout-issue ), cette approche ne fonctionnera donc plus avec les conteneurs plus récents. Cependant, à partir de Docker 19.03, unesysctl
option peut être fournie aux services (par exemple dans un fichier de composition). Cela peut être utilisé pour définir les drapeaux ci-dessus directement dans les conteneurs sans déconner avec l'hôte. docs.docker.com/compose/compose-file/#sysctlsIl existe un autre moyen d'empêcher la fermeture de la connexion inactive. Le problème est lié à la découverte du service Swarm par défaut qui ferme la connexion inactive après 15 minutes.
Le
dnsrr
mode endpoint spécifié résout explicitement le problème, par exemple:la source