Rumah  >  Artikel  >  pangkalan data  >  Mengapa Saya Mendapat ECONNREFUSED Apabila Menyambung ke Bekas Docker MySQL daripada Node.js?

Mengapa Saya Mendapat ECONNREFUSED Apabila Menyambung ke Bekas Docker MySQL daripada Node.js?

DDD
DDDasal
2024-11-10 22:22:03139semak imbas

Why Am I Getting ECONNREFUSED When Connecting to a MySQL Docker Container from Node.js?

Menyambung ke MySQL Docker Container: Menyelesaikan ECONNREFUSED

Artikel ini menangani ralat ECONNREFUSED yang sering dihadapi apabila cuba menyambung ke bekas MySQL Docker daripada Node.js.

Latar Belakang

Dalam aplikasi Dockerized berbilang bekas, adalah perkara biasa untuk mempunyai bekas pangkalan data (cth., MySQL) dan menyambung kepadanya daripada bekas lain (cth., aplikasi web Node.js). Walau bagaimanapun, sambungan ini boleh gagal dengan ralat ECONNREFUSED, menandakan bahawa aplikasi Node.js tidak dapat mencapai pangkalan data.

Memahami Isu

Apabila mengkonfigurasi bekas Docker, port pemetaan adalah penting. Salah tanggapan yang lazim ialah pemetaan port, seperti "3307:3306", bermakna bekas sedang mendengar pada port 3307. Walau bagaimanapun, kontena biasanya mendengar pada port dalaman mereka. Dalam kes MySQL, ia mendengar pada port 3306 dalam bekas.

Penyelesaian: Ubah Suai Konfigurasi dan DNS Node.js

Untuk menyelesaikan isu ini, ubah suai Node konfigurasi .js untuk menyambung ke pangkalan data pada port 3306 dan menentukan DNS yang betul. Dalam kes ini, DNS ialah 'mysql', seperti yang ditakrifkan dalam docker-compose.yml.

Ini mengemas kini konfigurasi Node.js seperti berikut:

const config = {
    host: 'mysql',  // Replace 'localhost' with the container DNS
    database: 'mydb',
    port: '3306',
    user: 'mysql',
    password: '1234',
    connectionLimit: 10
}

Selain itu, ubah suai arahan dalam docker-compose.yml:

command: ["./wait-for-it.sh", "mysql:3306"]  // Update the port number

Ini memastikan bahawa skrip "wait-for-it.sh" menunggu MySQL mendengar pada port 3306 dalam bekas.

Kesimpulan

Dengan memahami mekanisme pemetaan port dan mengemas kini konfigurasi Node.js dan DNS, adalah mungkin untuk menyelesaikan ralat ECONNREFUSED dan mewujudkan sambungan yang berjaya antara aplikasi Node.js dan MySQL bekas dalam persekitaran Dockerized.

Atas ialah kandungan terperinci Mengapa Saya Mendapat ECONNREFUSED Apabila Menyambung ke Bekas Docker MySQL daripada Node.js?. 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