将NodeJS容器连接到MySQL数据库

问题描述 投票:1回答:1

在将这篇文章标记为重复注释之前,我已经在这里查看了其他相关帖子,几乎无处不在,我没有找到解决我的精确案例的方法。我只是在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拒绝,即使(看起来像我看起来像)正确的凭据。如果已经讨论过这个特殊情况,我会提前道歉。

mysql node.js docker
1个回答
0
投票

ports: "3306:3306"添加到db服务。

© www.soinside.com 2019 - 2024. All rights reserved.