Heim > Backend-Entwicklung > Golang > Warum wird meiner Go-App „Verbindung verweigert' zu Docker Compose Postgres angezeigt, wenn pgAdmin erfolgreich eine Verbindung herstellt?

Warum wird meiner Go-App „Verbindung verweigert' zu Docker Compose Postgres angezeigt, wenn pgAdmin erfolgreich eine Verbindung herstellt?

Patricia Arquette
Freigeben: 2024-12-24 12:17:15
Original
311 Leute haben es durchsucht

Why Does My Go App Get

Docker-Compose Postgres-Verbindung abgelehnt: Verbindungsprobleme lösen

In einem Docker-Compose-Setup mit Postgres DB mit pg-admin und Go, Möglicherweise treten Verbindungsprobleme zwischen Go und Postgres auf, obwohl pg-admin erfolgreich eine Verbindung herstellen kann. Dieser Artikel geht auf die möglichen Ursachen ein und bietet Lösungen.

Ursache

Das Problem entsteht durch den im Datenbankverbindungs-URI angegebenen Hostnamen. Während die Umgebungsvariable auf „postgres“ verweist, lautet der Docker-Container-/Dienstname für Postgres „database“. Diese Diskrepanz verhindert, dass Go eine Verbindung aufbaut.

Lösung

Es gibt zwei mögliche Lösungen:

Option 1: Ändern Sie den Containernamen

Ändern Sie die Docker-Compose-Datei, um den Dienstnamen von „Datenbank“ in zu ändern „postgres.“

database:
  build: database
  restart: always
  hostname: postgres
Nach dem Login kopieren
Nach dem Login kopieren

Option 2: Verwenden Sie ein explizites Hostnamenfeld

Alternativ können Sie der Postgres-Dienstkonfiguration ein explizites Hostnamenfeld hinzufügen:

database:
  build: database
  restart: always
  hostname: postgres
Nach dem Login kopieren
Nach dem Login kopieren

Beide dieser Lösungen stellt sicher, dass der Hostname im Verbindungs-URI mit dem Namen des Postgres-Containers übereinstimmt. Damit Go eine erfolgreiche Verbindung herstellen kann.

Zusätzliche Überlegungen

Damit mehrere Containerdienste effektiv kommunizieren können, können Sie die Einrichtung eines dedizierten Netzwerks in Betracht ziehen. Fügen Sie dazu einen Abschnitt „Netzwerke“ zu jedem gewünschten Dienst im selben Netzwerk hinzu.

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet
Nach dem Login kopieren

Abschließend definieren Sie das Netzwerk am Ende der Erstellungsdatei:

networks:
  mynet:
    name: my-shared-db-network
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird meiner Go-App „Verbindung verweigert' zu Docker Compose Postgres angezeigt, wenn pgAdmin erfolgreich eine Verbindung herstellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage