将NodeJS容器连接到MySQL数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将NodeJS容器连接到MySQL数据库相关的知识,希望对你有一定的参考价值。
在将这篇文章标记为重复注释之前,我已经在这里查看了其他相关帖子,几乎无处不在,我没有找到解决我的精确案例的方法。我只是在docker-compose.yml
版本之间混淆并将端口相互链接。
问题在于:我用Docker创建了两个容器,一个托管NodeJS服务器,一个托管mysql数据库。
我的docker-compose.yml看起来像这样:
version: '3'
services:
server:
build: ./server/
ports:
- "8080:8080"
depends_on:
- db
db:
build: ./db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_DATABASE: dashboard_nodejs
MYSQL_USER: root
MYSQL_PASSWORD: password
client:
image: angular_app
build: ./front/
ports:
- "4242:80"
depends_on:
- server
运行docker-compose up
时,我的所有应用程序都构建并运行,没有问题,直到服务器尝试连接到MySQL,退出时:
Error: connect ECONNREFUSED 172.20.0.2:3306 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
我的数据库的dockerfile只包含
FROM mysql
COPY init_db.sql /docker-entrypoint-initdb.d/
和init_db.sql当前是
CREATE DATABASE IF NOT EXISTS dashboard_nodejs;
GRANT ALL PRIVILEGES ON dashboard_nodejs.*
TO 'root'@'%' IDENTIFIED BY 'password'
WITH GRANT OPTION;
最后,我的服务器尝试使用以下参数建立连接:
var con = mySql.createConnection({
host: "db",
user: "root",
password: "password",
database: "dashboard_nodejs"
});
我不知道为什么连接被mysql拒绝,即使(看起来像我看起来像)正确的凭据。如果已经讨论过这个特殊情况,我会提前道歉。
答案
将ports: "3306:3306"
添加到db服务。
以上是关于将NodeJS容器连接到MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 docker-compose 将 NodeJS 应用程序连接到 MySQL 映像时出现 ECONNREFUSED
将 docker 容器中运行的 JavaScript 连接到另一个 docker 容器上运行的 MySQL 数据库