Rumah >pembangunan bahagian belakang >Golang >Aplikasi Gorm tidak boleh menyambung ke PostgreSQL dalam bekas docker pada Mac, mengabaikan 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.
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.
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!