Maison > développement back-end > Golang > le corps du texte

L'application Gorm ne peut pas se connecter à PostgreSQL dans le conteneur Docker sur Mac, ignorant le DSN

王林
Libérer: 2024-02-09 09:12:10
avant
906 Les gens l'ont consulté

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

L'éditeur php Xiaoxin a récemment rencontré un problème, c'est-à-dire qu'il y a eu un problème de connexion lors de l'utilisation de l'application Gorm sur Mac pour se connecter à PostgreSQL dans un conteneur Docker. La performance spécifique est que le DSN est ignoré. DSN est l'abréviation du nom de la source de données et est utilisé pour spécifier les informations de connexion à la base de données. Ce problème m'énerve énormément car ne pas pouvoir se connecter à la base de données entraînera un mauvais fonctionnement de l'application. Ensuite, je partagerai les problèmes que j'ai rencontrés et les solutions, dans l'espoir d'aider tout le monde.

Contenu de la question

J'essaie de créer une API simple go rest. J'utilise la bibliothèque gorm pour le traitement de la base de données mais elle ne peut pas se connecter à la base de données dans le conteneur. Je pense que cela pourrait être un problème avec Docker sur la puce Apple, mais je n'en suis pas sûr. J'ai un autre projet qui utilise essentiellement la même configuration mais qui n'a absolument aucun problème de connexion à la base de données.

Fondamentalement, les paramètres de connexion semblent changer complètement au moment de l'exécution, ignorant la chaîne DSN

C'est 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:
Copier après la connexion

C'est la partie qui fait la connexion à la base de données :

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

dbopen, err := gorm.open(postgres.open(dsn), &gorm.config{})
Copier après la connexion
Le paramètre

dsn correspond au paramètre configuré dans docker.env. pgadmin n'a aucun problème à établir la connexion.

Voici l'erreur que j'obtiens, pour une raison quelconque, les paramètres de connexion semblent avoir complètement changé :

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

J'ai essayé de changer la dernière partie de la chaîne DSN et de supprimer et recréer le conteneur, mais toujours sans succès.

Solution de contournement

J'ai naïvement supposé que le format de la chaîne DSN est le même que le format de MySQL. Au lieu de cela, cela devrait ressembler à ceci :

dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"
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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!