Heim  >  Artikel  >  Backend-Entwicklung  >  Die Gorm-Anwendung kann keine Verbindung zu PostgreSQL im Docker-Container auf dem Mac herstellen und ignoriert DSN

Die Gorm-Anwendung kann keine Verbindung zu PostgreSQL im Docker-Container auf dem Mac herstellen und ignoriert DSN

王林
王林nach vorne
2024-02-09 09:12:10935Durchsuche

Gorm 应用程序无法连接到 Mac 上 docker 容器中的 PostgreSQL,忽略 DSN

Der PHP-Editor Xiaoxin ist kürzlich auf ein Problem gestoßen, bei dem es sich um ein Verbindungsproblem handelt, wenn die Gorm-Anwendung auf dem Mac verwendet wird, um eine Verbindung zu PostgreSQL in einem Docker-Container herzustellen. Die spezifische Leistung besteht darin, dass der DSN ignoriert wird. DSN ist die Abkürzung für den Datenquellennamen und wird zur Angabe von Datenbankverbindungsinformationen verwendet. Dieses Problem nervt mich unendlich, da die Anwendung nicht ordnungsgemäß ausgeführt werden kann, wenn keine Verbindung zur Datenbank hergestellt werden kann. Als nächstes werde ich die Probleme, auf die ich gestoßen bin, und die Lösungen mitteilen, in der Hoffnung, allen zu helfen.

Frageninhalt

Ich versuche, eine einfache Go-Rest-API zu erstellen. Ich verwende die Gorm-Bibliothek für die Datenbankverarbeitung, sie kann jedoch keine Verbindung zur Datenbank im Container herstellen. Ich denke, das könnte ein Problem mit Docker auf dem Apple-Chip sein, bin mir aber nicht sicher. Ich habe ein anderes Projekt, das grundsätzlich das gleiche Setup verwendet, bei dem es aber absolut keine Probleme mit der Verbindung zur Datenbank gibt.

Grundsätzlich scheinen sich die Verbindungsparameter zur Laufzeit vollständig zu ändern, wobei die DSN-Zeichenfolge ignoriert wird

Das ist docker-compose.yml:

version: '3'

services:
  db:
    image: 'postgres:latest'
    container_name: bazos-watcher-db
    ports:
      - '5420:5432'
    volumes:
      - dbdata:/var/lib/postgresql/data
      - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
    env_file:
      - 'docker.env'
    restart: always

volumes:
  dbdata:

Dies ist der Teil, der die Datenbankverbindung herstellt:

dsn := "bazos:kokos@tcp(localhost:5420)/bazos?charset=utf8mb4&parsetime=true&loc=local"

dbopen, err := gorm.open(postgres.open(dsn), &gorm.config{})
Der

dsn-Parameter stimmt mit dem in docker.env konfigurierten Parameter überein. pgadmin hat kein Problem damit, die Verbindung herzustellen.

Dies ist die Fehlermeldung, die ich erhalte. Aus irgendeinem Grund scheinen sich die Verbindungsparameter vollständig geändert zu haben:

[error] failed to initialize database, got error failed to connect to `host=/private/tmp user=tassilo database=`: dial error (dial unix /private/tmp/.s.PGSQL.5432: connect: no such file or directory)
2023/03/15 17:20:59 failed to connect to `host=/private/tmp user=tassilo database=`: dial error (dial unix /private/tmp/.s.PGSQL.5432: connect: no such file or directory)
exit status 1

Ich habe versucht, den letzten Teil der DSN-Zeichenfolge zu ändern und den Container zu löschen und neu zu erstellen, aber immer noch ohne Erfolg.

Problemumgehung

Ich habe naiverweise angenommen, dass das Format der DSN-Zeichenfolge mit dem Format von MySQL übereinstimmt. Stattdessen sollte es so aussehen:

dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"

Das obige ist der detaillierte Inhalt vonDie Gorm-Anwendung kann keine Verbindung zu PostgreSQL im Docker-Container auf dem Mac herstellen und ignoriert DSN. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen