首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs mysql.createConnection不接受密码

Nodejs mysql.createConnection不接受密码
EN

Stack Overflow用户
提问于 2019-03-12 08:24:51
回答 1查看 766关注 0票数 0

我在使用NodeJs连接到Docker容器中的MySQL数据库时遇到了问题。

错误声明:"Error: Access denied for user 'username'@'172.19.0.3' (using password: NO)",但据我所见,我正在提供一个密码。

所以我的问题是:为什么错误声明我没有使用密码,而我清楚地提供了一个密码?

我的代码之一是:

代码语言:javascript
复制
  /* file: ./nodejs-server/database/database.js */ 
  const mysql = require('mysql2/promise');

  let db = await mysql
    .createConnection({ // Error: Access denied for user 'username'@'172.19.0.3' (using password: NO)
      host: env.DB_HOST,
      port: 3306,
      user: env.MYSQL_USER,
      password: env.MYSQL_PASSWORD,
      database: env.MYSQL_DATABASE,
      authSwitchHandler: (_, cb) => {
        // workaround for node mysql bug #1507
        cb(null, Buffer.alloc(0));
      },
    })
    .catch((err) => {
      throw new Error('Could not connect to the database');
    });

我检查了env.MYSQL_PASSWORD的值,它包含正确的密码。

我不确定此错误是由错误的语法引起的,还是由我的Docker容器的设置引起的。

代码语言:javascript
复制
# file: ./mysql-server/Dockerfile
FROM mysql:latest
VOLUME ["/etc/mysql", "/var/lib/mysql"]
EXPOSE 3306
代码语言:javascript
复制
# file: ./nodejs-server/Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "npm", "run", "watch" ]
代码语言:javascript
复制
# file: ./docker-composer.yml
version: "3.3"
services:
  nodejs:
    build: ./nodejs-server
    ports:
      - "8001:8080"
    links:
      - db:db
    env_file:
      - ./.env-example
    volumes:
      - ./nodejs-server:/usr/src/app
  db:
    build: ./mysql-server
    volumes:
      - ./mysql-server/data:/docker-entrypoint-initdb.d #A folder /mysql-server/data with a .sql file needs to exist
    env_file:
      - ./.env-example

nodejs和mysql容器正在运行,因为我可以登录到命令行,nodejs正在正确地播下一个"Hello“页面。

另外,Docker容器正在连接,因为当我停止mysql容器时,我会收到另一个错误,告诉我无法建立连接。

我有GRANT USAGE ON *.* TO `username`@`%`GRANT ALL PRIVILEGES ON `databasename`.* TO `username`@`%`,所以权限似乎没问题。

EN

回答 1

Stack Overflow用户

发布于 2019-03-12 09:06:24

解决方案是允许用户从172.19连接。*由于停靠容器IP可能是不可预测的,必须正确设置MySql用户权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55116951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档