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
Libérer: 2024-12-24 12:17:15
original
270 Les gens l'ont consulté

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
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

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
Copier après la connexion

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

networks:
  mynet:
    name: my-shared-db-network
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal