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 ?

Pourquoi mon application Go refuse-t-elle une connexion à ma base de données Docker Compose Postgres, malgré la connexion réussie de pgAdmin ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 16:03:10166parcourir

Why is my Go application refusing a connection to my Docker Compose Postgres database, despite pgAdmin connecting successfully?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn