Ich habe einen NodeJS-Backend-Server erstellt, der mit MySQL verbunden ist. Mit Docker habe ich mit den folgenden Befehlen ein Image erstellt, um meine Dateien „nodeJS“ und „package.json“ (einschließlich MySQL) auszuführen. Hier ist meine Docker-Datei:
FROM node WORKDIR /app COPY package.json . RUN npm install COPY . /app EXPOSE 3000 CMD ["node", "app.js"]
Ich habe eine weitere Datei, um mit NodeJS eine Verbindung zu MySQL herzustellen:
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;
Ich habe versucht, Dockers auszuführen (docker run -p 3000:3000 help:help), habe aber die folgende Fehlermeldung erhalten (ich weiß nicht, wie ich das beheben kann, bitte helfen Sie!!):
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 }
在多容器环境中,docker 容器中有多个网络,每个容器都有自己的网络命名空间。当您需要访问其他 Docker 容器时,Docker 中的网络是通过服务名称完成的。在 docker-compose 设置中,您将引用服务的名称。使用普通的 docker 容器时,会有点困难。你需要
docker网络创建awesomeNetwork
docker网络连接nodebackend AwesomeNetwork
docker网络连接db AwesomeNetwork
现在,您可以分别使用名称
db/nodebackend
引用容器网络内的另一个容器。在开发/本地
docker-compose
环境中,我强烈建议使用docker-compose
并编写您的 compose 清单。那么您就不需要创建网络,因为它每次都会为您创建。设置看起来像这样现在您可以使用主机名
db
连接到节点应用程序中的db