将NodeJS容器连接到MySQL数据库

时间:2018-11-11 19:48:00

标签: mysql node.js docker

在将此帖子标记为重复注释之前,我已经在这里找到了其他相关的帖子,并且在没有找到确切解决方案的情况下,我几乎可以在任何地方查看过。我只是在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并以:p退出为止,都没有问题。

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也会拒绝连接。 如果对此特殊情况进行了讨论,我表示歉意。

1 个答案:

答案 0 :(得分:0)

btnAdd添加到数据库服务。