Maison >développement back-end >Golang >L'application Gorm ne peut pas se connecter à PostgreSQL dans le conteneur Docker sur Mac, ignorant le DSN

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

王林
王林avant
2024-02-09 09:12:10989parcourir

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:

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{})
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

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"

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer