Heim >Backend-Entwicklung >Golang >Warum verweigert meine Go-Anwendung eine Verbindung zu meiner Docker Compose Postgres-Datenbank, obwohl pgAdmin erfolgreich eine Verbindung hergestellt hat?
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!