Maison >développement back-end >Golang >Pourquoi mon application Go obtient-elle une « connexion refusée » pour Docker Compose Postgres lorsque pgAdmin se connecte avec succès ?

Pourquoi mon application Go obtient-elle une « connexion refusée » pour Docker Compose Postgres lorsque pgAdmin se connecte avec succès ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 12:17:15268parcourir

Why Does My Go App Get

Connexion Docker-Compose Postgres refusée : résolution des problèmes de connexion

Dans une configuration Docker-compose impliquant Postgres DB avec pg-admin et Go, vous pouvez rencontrer des problèmes de connexion entre Go et Postgres, même si pg-admin parvient à se connecter. Cet article examine les causes potentielles et propose des solutions.

Cause première

Le problème survient en raison du nom d'hôte spécifié dans l'URI de connexion à la base de données. Alors que la variable d'environnement pointe vers « postgres », le nom du conteneur/service Docker pour Postgres est « base de données ». Cet écart empêche Go d'établir une connexion.

Solution

Il existe deux solutions possibles :

Option 1 : Modifier le nom du conteneur

Modifiez le fichier de composition Docker pour changer le nom du service de "base de données" à "postgres."

database:
  build: database
  restart: always
  hostname: postgres

Option 2 : Utiliser un champ de nom d'hôte explicite

Vous pouvez également ajouter un champ de nom d'hôte explicite à la configuration du service Postgres :

database:
  build: database
  restart: always
  hostname: postgres

L'une ou l'autre de ces solutions garantira que le nom d'hôte dans l'URI de connexion correspond au nom du conteneur Postgres, permettant à Go d'établir une connexion réussie.

Considérations supplémentaires

Pour que plusieurs services de conteneurs communiquent efficacement, vous pouvez envisager de créer un réseau dédié. Pour cela, ajoutez une section "réseaux" à chaque service que vous souhaitez sur le même réseau.

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet

Enfin, définissez le réseau à la fin du fichier de composition :

networks:
  mynet:
    name: my-shared-db-network

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