【发布时间】:2019-08-02 15:47:38
【问题描述】:
我在使用 NodeJs 连接到 Docker 容器中的 MySQL 数据库时遇到问题。
错误状态:"Error: Access denied for user 'username'@'172.19.0.3' (using password: NO)",但据我所知,我正在提供密码。
所以我的问题是:为什么错误表明我没有使用密码,而我明确给出了密码?
我的部分代码:
/* 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 容器的设置引起的。
# file: ./mysql-server/Dockerfile
FROM mysql:latest
VOLUME ["/etc/mysql", "/var/lib/mysql"]
EXPOSE 3306
# file: ./nodejs-server/Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "npm", "run", "watch" ]
# 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 world”页面。
此外,Docker 容器正在连接,因为当我停止 mysql 容器时,我收到另一个错误,告诉我无法建立连接。
我有GRANT USAGE ON *.* TO `username`@`%` 和GRANT ALL PRIVILEGES ON `databasename`.* TO `username`@`%` 所以权限似乎没问题。
【问题讨论】: