Heim >Backend-Entwicklung >Golang >Warum verweigert meine Go-Anwendung eine Verbindung zu meiner Docker Compose Postgres-Datenbank, obwohl pgAdmin erfolgreich eine Verbindung hergestellt hat?

Warum verweigert meine Go-Anwendung eine Verbindung zu meiner Docker Compose Postgres-Datenbank, obwohl pgAdmin erfolgreich eine Verbindung hergestellt hat?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 16:03:10166Durchsuche

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

Docker-Compose-Postgres-Verbindung abgelehnt: Behebung des Verbindungsproblems

In einem Docker-Compose-Setup mit Postgres haben Sie ein Problem beschrieben, bei dem Sie kann über pg-admin eine Verbindung zu Postgres herstellen, tritt jedoch beim Versuch, eine Verbindung von Go aus herzustellen, auf ein Verbindungsproblem.

Das Problem ergibt sich aus der Art und Weise, wie Sie in Ihrem Go-Code auf den Datenbank-Hostnamen verweisen. Sie verwenden POSTGRES_HOST als Postgres, den Container-/Dienstnamen für Postgres in Ihrer Docker-Compose-Konfiguration. In Ihrem Go-Code stellen Sie jedoch eine Verbindung zur Datenbank her, die der eigentliche Containername für den Datenbankdienst ist.

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

Option 1: Ändern Sie den Containernamen in Docker-Compose

Ändern Sie den Namen Ihres Datenbankdienstes in Ihrer docker-compose.yaml-Datei von „Datenbank“ in „Postgres“. Dadurch stimmen der Containername und der Hostname, den Sie in Ihrem Go-Code verwenden, überein.

Option 2: Feld für expliziten Hostnamen

Alternativ können Sie einen expliziten Hostnamen hinzufügen Feld zum Datenbankdienst in Ihrer Docker-Compose-Konfiguration:

database:
  build: database
  restart: always
  hostname: postgres

Dies setzt den Hostnamen des Datenbankcontainers auf postgres, Dies entspricht dem Hostnamen, auf den Sie in Ihrem Go-Code verweisen.

Zusätzliche Überlegungen

Darüber hinaus möchten Sie möglicherweise die Erstellung eines dedizierten Netzwerks innerhalb Ihrer Docker-Compose-Konfiguration in Betracht ziehen stellen sicher, dass Container sicher und effizient miteinander kommunizieren können. So geht's:

Fügen Sie in Ihrer docker-compose.yaml-Datei einen Abschnitt „Netzwerke“ zu jedem Dienst hinzu, der das dedizierte Netzwerk verwenden soll, etwa so:

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet

Dann definieren Sie das Netzwerk am Ende Ihrer docker-compose.yaml-Datei:

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

Dadurch wird ein neues Netzwerk mit dem Namen erstellt my-shared-db-network, über das Ihre Container kommunizieren können.

Durch die Implementierung einer dieser Lösungen sollten Sie in der Lage sein, von Go aus innerhalb Ihres Docker-Compose-Setups erfolgreich eine Verbindung zu Ihrer Postgres-Datenbank herzustellen.

Das obige ist der detaillierte Inhalt vonWarum verweigert meine Go-Anwendung eine Verbindung zu meiner Docker Compose Postgres-Datenbank, obwohl pgAdmin erfolgreich eine Verbindung hergestellt hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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