Rumah >pembangunan bahagian belakang >Golang >Mengapa aplikasi Go saya menolak sambungan ke pangkalan data Docker Compose Postgres saya, walaupun pgAdmin berjaya menyambung?

Mengapa aplikasi Go saya menolak sambungan ke pangkalan data Docker Compose Postgres saya, walaupun pgAdmin berjaya menyambung?

Susan Sarandon
Susan Sarandonasal
2024-12-31 16:03:10166semak imbas

Why is my Go application refusing a connection to my Docker Compose Postgres database, despite pgAdmin connecting successfully?

Sambungan Postgres Docker-Compose Ditolak: Menyelesaikan Isu Sambungan

Dalam persediaan Docker-Compose dengan Postgres, anda menerangkan isu di mana anda boleh menyambung ke Postgres menggunakan pg-admin tetapi menghadapi masalah sambungan apabila cuba menyambung dari Pergi.

Masalah berpunca daripada cara anda merujuk nama hos pangkalan data dalam kod Go anda. Anda menggunakan POSTGRES_HOST sebagai postgres, iaitu nama bekas/perkhidmatan untuk Postgres dalam konfigurasi Docker-Compose anda. Walau bagaimanapun, dalam kod Go anda, anda sedang menyambung ke pangkalan data, iaitu nama bekas sebenar untuk perkhidmatan pangkalan data.

Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:

Pilihan 1: Tukar Nama Bekas dalam Docker-Compose

Tukar nama perkhidmatan pangkalan data anda dalam fail docker-compose.yaml anda daripada pangkalan data kepada postgres. Ini akan menjadikan nama bekas dan nama hos yang anda gunakan dalam kod Go anda sepadan.

Pilihan 2: Medan Nama Hos Eksplisit

Sebagai alternatif, anda boleh menambah nama hos eksplisit medan ke perkhidmatan pangkalan data dalam konfigurasi Docker-Compose anda:

database:
  build: database
  restart: always
  hostname: postgres

Ini menetapkan nama hos bekas pangkalan data kepada postgres, yang sepadan dengan nama hos yang anda rujuk dalam kod Go anda.

Pertimbangan Tambahan

Selain itu, anda mungkin ingin mempertimbangkan untuk membuat rangkaian khusus dalam Docker-Compose anda konfigurasi untuk memastikan bekas boleh berkomunikasi antara satu sama lain dengan selamat dan cekap. Begini cara untuk melakukannya:

Dalam fail docker-compose.yaml anda, tambahkan bahagian rangkaian pada setiap perkhidmatan yang sepatutnya menggunakan rangkaian khusus, seperti ini:

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet

Kemudian, tentukan rangkaian di hujung fail docker-compose.yaml anda:

networks:
  mynet:
    name: my-shared-db-network

Ini akan mencipta rangkaian baharu bernama my-shared-db-network yang boleh digunakan oleh bekas anda untuk berkomunikasi.

Dengan melaksanakan salah satu daripada penyelesaian ini, anda seharusnya berjaya menyambung ke pangkalan data Postgres anda daripada Go dalam persediaan Docker-Compose anda.

Atas ialah kandungan terperinci Mengapa aplikasi Go saya menolak sambungan ke pangkalan data Docker Compose Postgres saya, walaupun pgAdmin berjaya menyambung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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