Rumah >pembangunan bahagian belakang >Golang >Aplikasi Gorm tidak boleh menyambung ke PostgreSQL dalam bekas docker pada Mac, mengabaikan DSN

Aplikasi Gorm tidak boleh menyambung ke PostgreSQL dalam bekas docker pada Mac, mengabaikan DSN

王林
王林ke hadapan
2024-02-09 09:12:10947semak imbas

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

Editor PHP Xiaoxin baru-baru ini menghadapi masalah, iaitu masalah sambungan apabila menggunakan aplikasi Gorm pada Mac untuk menyambung ke PostgreSQL dalam bekas docker. Prestasi khusus ialah DSN diabaikan. DSN ialah singkatan nama sumber data dan digunakan untuk menentukan maklumat sambungan pangkalan data. Masalah ini mengganggu saya tanpa henti kerana tidak dapat menyambung ke pangkalan data akan menyebabkan aplikasi tidak berjalan dengan baik. Seterusnya, saya akan berkongsi masalah yang saya hadapi dan penyelesaiannya, dengan harapan dapat membantu semua orang.

Kandungan soalan

Saya cuba mencipta api go rest yang mudah. Saya menggunakan perpustakaan gorm untuk pemprosesan pangkalan data tetapi ia tidak dapat menyambung ke pangkalan data dalam bekas. Saya fikir ini mungkin masalah dengan docker pada cip epal, tetapi tidak pasti. Saya mempunyai projek lain yang pada dasarnya menggunakan tetapan yang sama tetapi sama sekali tidak mempunyai masalah menyambung ke pangkalan data.

Pada asasnya, parameter sambungan nampaknya berubah sepenuhnya semasa masa jalan, mengabaikan rentetan dsn

Ini ialah 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:

Ini adalah bahagian yang membuat sambungan pangkalan data:

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

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

dsn sepadan dengan parameter yang dikonfigurasikan dalam docker.env. pgadmin tidak mempunyai masalah untuk mewujudkan sambungan.

Ini adalah ralat yang saya perolehi, atas sebab tertentu parameter sambungan nampaknya telah berubah sepenuhnya:

[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

Saya cuba menukar bahagian terakhir rentetan dsn dan memadam serta mencipta semula bekas, tetapi masih tidak berjaya.

Penyelesaian

Saya secara naif menganggap bahawa format rentetan dsn adalah sama dengan format mysql. Sebaliknya, ia sepatutnya kelihatan seperti ini:

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

Atas ialah kandungan terperinci Aplikasi Gorm tidak boleh menyambung ke PostgreSQL dalam bekas docker pada Mac, mengabaikan DSN. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam