gpt4 book ai didi

mysql - 将 npm api 连接到 MySQL 时 docker ECONNREFUSED

转载 作者:行者123 更新时间:2023-11-29 16:03:03 24 4
gpt4 key购买 nike

您好,我正在尝试使用 docker 获取一个简单的 NodeJS API 应用程序来处理 MySQL 数据库中的数据。但我遇到了 ECONNREFUSED 错误,我认为这是因为我设置容器/端口/ip 的方式阻止了我的 API 容器与 MySQL 容器的通信。我将在下面说明我的工作流程:

//start docker network mysql-net
docker network create --driver bridge mysql-net
//Launch a docker container running a MySQL server in detached mode
docker run -d --name mysql-server --network mysql-net -p 3306:3306 -e "MYSQL_ROOT_PASSWORD=rootpassword" -e "MYSQL_DATABASE=bookaplace" -e "MYSQL_USER=bookaplace" -e "MYSQL_PASSWORD=hunter2" mysql:5

此时,我通过命令行连接到 mysql 服务器,并在“bookaplace”数据库中手动创建“lodgings”表。我使用插入语句将数据添加到该表中。

我位于 API Web 应用程序的文件夹内,其中包括我的 dockerfile:

FROM node:11
WORKDIR /usr/src/app
COPY . .
RUN npm install
ENV PORT=8000
EXPOSE ${PORT}
CMD [ "npm", "start" ]

我可以使用“npm start”在本地运行我的应用程序,并且它可以正确启动。

//build image from dockerfile
docker build -t book-a-place-api .

//launch docker book-a-place-api container to port 8000
docker run -d --name book-a-place-api --network mysql-net -p 8000:8000 book-a-place-api

现在我已经启动并运行了 book-a-place-api 容器和 mysql-server 容器。我试图让一个端点正常工作,即对/lodgings 的获取请求。我通过 http://localhost:8000/lodgings 访问此请求,并且可以在我的 book-a-place-api 日志中看到连接 MySQL 数据库失败:

enter image description here

我认为这与我如何连接到我的 mysql-server 容器有关?在我的 book-a-place-api 文件中,我尝试使用以下代码连接到 mysql 数据库:

const mysqlHost = 'mysql-net'; 
const mysqlPort = 3306;
const mysqlDBName = 'bookaplace';
const mysqlUser = 'root';
const mysqlPassword = 'rootpassword';

const mysqlPool = mysql.createPool({
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: mysqlHost,
port: mysqlPort,
database: mysqlDBName,
user: mysqlUser,
password: mysqlPassword
});

最佳答案

要连接的 DNS 名称是容器名称 mysql-server,而不是网络名称 mysql-net。更新您的文件:

const mysqlHost = 'mysql-server'; 
const mysqlPort = 3306;
const mysqlDBName = 'bookaplace';
const mysqlUser = 'root';
const mysqlPassword = 'rootpassword';

const mysqlPool = mysql.createPool({
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: mysqlHost,
port: mysqlPort,
database: mysqlDBName,
user: mysqlUser,
password: mysqlPassword
});

关于mysql - 将 npm api 连接到 MySQL 时 docker ECONNREFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com