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

王林
Lepaskan: 2024-02-09 09:12:10
ke hadapan
906 orang telah melayarinya

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:
Salin selepas log masuk

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{})
Salin selepas log masuk
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
Salin selepas log masuk

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"
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!