将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数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将nodeJS docker容器连接到mongoDB

如何将两个NodeJS docker容器连接在一起?

尝试通过 docker-compose 将 NodeJS 应用程序连接到 MySQL 映像时出现 ECONNREFUSED

将 docker 容器中运行的 JavaScript 连接到另一个 docker 容器上运行的 MySQL 数据库

无法将 spring-boot 2 服务连接到不同容器中的 mysql

如何将 Grafana 的 Docker 容器连接到 MySql 的 Docker 容器?