Node.js ECONNREFUSED Semasa Menyambung ke MySQL Docker Container
Dalam Docker, buat persediaan yang melibatkan bekas MySQL dan perkhidmatan web Node.js , menyambung ke MySQL daripada Node.js mengakibatkan ralat ECONNREFUSED, walaupun mempunyai Docker yang mantap pautan dan tetapan pangkalan data yang dikonfigurasikan dengan betul.
Pernyataan Masalah
Masalah ini berpunca daripada salah faham pemetaan port Docker. Dalam fail karang Docker:
ports: - "3307:3306"
Ini memetakan port hos 3307 ke port kontena 3306. Walaupun ini membenarkan akses luaran ke pangkalan data bekas MySQL daripada hos, ia tidak mengubah port dalaman bekas itu terus mendengar.
Penyelesaian
Untuk menyelesaikan isu itu, Konfigurasi Node.js dan arahan Docker telah dilaraskan:
Konfigurasi Node.js
const config = { host: 'mysql', // Use the Docker service name instead of 'localhost' database: 'mydb', port: '3306', // Connect to the container's native port user: 'mysql', password: '1234', connectionLimit: 10 }
Perintah Docker
command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306
Penjelasan
Dengan menggunakan Nama perkhidmatan Docker (mysql) sebagai hos dalam konfigurasi Node.js, kami memastikan bahawa percubaan sambungan dibuat kepada bekas, bukan hos. Selain itu, dengan menukar argumen skrip tunggu-untuk-itu kepada 3306, kami menunggu MySQL bersedia pada port asalnya dalam bekas.
Setelah perubahan ini dilaksanakan, ralat ECONNREFUSED telah diselesaikan dan Aplikasi Node.js berjaya menyambung ke bekas MySQL Docker.
Atas ialah kandungan terperinci Mengapa saya mendapat ECONNREFUSED apabila menyambung ke bekas MySQL daripada aplikasi Node.js saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!