Maison >développement back-end >Golang >Pourquoi mon application Go refuse-t-elle une connexion à ma base de données Docker Compose Postgres, malgré la connexion réussie de pgAdmin ?
Connexion Docker-Compose Postgres refusée : résolution du problème de connexion
Dans une configuration Docker-Compose avec Postgres, vous avez décrit un problème dans lequel vous peut se connecter à Postgres à l'aide de pg-admin mais est confronté à un problème de connexion lorsque vous tentez de vous connecter depuis Go.
Le problème vient de la façon dont vous référencez le nom d'hôte de la base de données dans votre code Go. Vous utilisez POSTGRES_HOST comme postgres, qui est le nom du conteneur/service pour Postgres dans votre configuration Docker-Compose. Cependant, dans votre code Go, vous vous connectez à la base de données, qui est le nom réel du conteneur du service de base de données.
Pour résoudre ce problème, vous avez deux options :
Option 1 : Modifiez le nom du conteneur dans Docker-Compose
Modifiez le nom de votre service de base de données dans votre fichier docker-compose.yaml de base de données à postgres. Cela fera correspondre le nom du conteneur et le nom d'hôte que vous utilisez dans votre code Go.
Option 2 : Champ de nom d'hôte explicite
Vous pouvez également ajouter un nom d'hôte explicite champ au service de base de données dans votre configuration Docker-Compose :
database: build: database restart: always hostname: postgres
Cela définit le nom d'hôte du conteneur de base de données sur postgres, qui correspond au nom d'hôte auquel vous faites référence dans votre code Go.
Considérations supplémentaires
De plus, vous souhaiterez peut-être envisager de créer un réseau dédié au sein de votre configuration Docker-Compose pour garantir que les conteneurs peuvent communiquer entre eux de manière sécurisée et efficace. Voici comment procéder :
Dans votre fichier docker-compose.yaml, ajoutez une section réseaux à chaque service qui doit utiliser le réseau dédié, comme ceci :
database: # ... networks: - mynet backend: # ... networks: - mynet
Ensuite, définissez le réseau à la fin de votre fichier docker-compose.yaml :
networks: mynet: name: my-shared-db-network
Cela créera un nouveau réseau nommé my-shared-db-network que vos conteneurs peuvent utiliser pour communiquer.
En implémentant l'une de ces solutions, vous devriez pouvoir vous connecter avec succès à votre base de données Postgres depuis Go dans votre configuration Docker-Compose.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!