Saya mencipta pelayan backend NodeJS yang disambungkan ke MySQL. Menggunakan Docker, saya mencipta imej untuk menjalankan fail nodeJS dan package.json saya (yang termasuk MySQL) menggunakan arahan berikut. Inilah fail Docker saya:
FROM node WORKDIR /app COPY package.json . RUN npm install COPY . /app EXPOSE 3000 CMD ["node", "app.js"]
Saya mempunyai fail lain untuk membuat sambungan ke MySQL menggunakan NodeJS:
const mysql = require("mysql"); const con = mysql.createConnection({ host: "localhost", user: "root", password: "ilovestackoverflow", database: "db830", port: "3306" }); con.connect(function (err, rows) { if (err) throw err; console.log("Database is connected!"); }); module.exports = con;
Saya cuba menjalankan Dockers (docker run -p 3000:3000 help:help) tetapi mendapat ralat berikut (tidak tahu cara membetulkannya, tolong bantu!!):
Server is listening on Port: 3000 /app/config/database.js:12 if (err) throw err; ^ Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1247:16) -------------------- at Protocol._enqueue (/app/node_modules/mysql/lib/protocol/Protocol.js:144:48) at Protocol.handshake (/app/node_modules/mysql/lib/protocol/Protocol.js:51:23) at Connection.connect (/app/node_modules/mysql/lib/Connection.js:116:18) at Object.<anonymous> (/app/config/database.js:11:5) at Module._compile (node:internal/modules/cjs/loader:1120:14) at Module._extensions..js (node:internal/modules/cjs/loader:1174:10) at Module.load (node:internal/modules/cjs/loader:998:32) at Module._load (node:internal/modules/cjs/loader:839:12) at Module.require (node:internal/modules/cjs/loader:1022:19) at require (node:internal/modules/cjs/helpers:102:18) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true }
Dalam persekitaran berbilang bekas, terdapat berbilang rangkaian dalam bekas docker, dan setiap bekas mempunyai ruang nama rangkaiannya sendiri. Apabila anda perlu mengakses bekas Docker lain, rangkaian dalam Docker dilakukan melalui nama perkhidmatan. Dalam tetapan docker-compose, anda akan merujuk nama perkhidmatan. Apabila menggunakan bekas docker biasa, ia lebih sukar. Anda perlukan
docker网络创建awesomeNetwork
docker网络连接nodebackend AwesomeNetwork
docker网络连接db AwesomeNetwork
Anda kini boleh merujuk bekas lain dalam rangkaian kontena menggunakan nama
db/nodebackend
secara individu.Dalam dev/local
docker-compose
环境中,我强烈建议使用docker-compose
dan tulis manifes karang anda. Kemudian anda tidak perlu membuat rangkaian kerana ia akan dibuat untuk anda setiap masa. Persediaan kelihatan seperti iniKini anda boleh menggunakan nama hos
db
连接到节点应用程序中的db