我正在尝试使用一个docker容器来处理mariadb和node.js图像。容器将使用/home/mysql
中现有的数据库。然而,当容器启动时,我在node.js中得到了这个“连接失败”错误:
Error: ER_HOST_NOT_PRIVILEGED:
Host '172.18.0.5' is not allowed to connect to this MariaDB server
下面是我的docker-compose.yml:
version: '3'
services:
mariadb:
image: mariadb
restart: always
volumes:
- /home/mysql:/var/lib/mysql
user: "mysql"
ports:
- "3306:3306"
watch:
build: .
restart: always
links:
- mariadb:mysql
environment:
- DOCKER_IP=172.18.0.2
depends_on: ['mariadb']
ports:
- "3000:3000"
在阅读了这篇thread之后,我发现mysql实际上是在运行的,但它无法让其他服务连接:
这是我检查过的一些步骤。如你所见,我可以登录到mysql示例:
$ docker exec -it 552aae9ea09c bash
mysql@552aae9ea09c:/$ mysql -u root -p
Enter password: *******
MariaDB [(none)]> SELECT host, user FROM mysql.user;
+-------------+------------------+
| host | user |
+-------------+------------------+
| 127.0.0.1 | root |
| ::1 | root |
| someusername| |
| someusername| root |
| localhost | |
| localhost | dbusername |
| localhost | databasename |
| localhost | root |
+-------------+------------------+
8 rows in set (0.00 sec)
mysql@552aae9ea09c:/$ mysqld --verbose --help | grep bind-address
2017-11-13 17:35:40 139825857279872 [Note] Plugin 'FEEDBACK' is disabled.
--bind-address=name IP address to bind to.
bind-address (No default value)
需要注意的一点是,即使我在yml文件中显式地将user设置为mysql
,/home/mysql中的这三个文件:ib_logfile0
,ib_logfile1
,ib_buffer_pool
仍然在systemd-journal-remote
的组下,我怀疑这与连接失败有关。(reference)
3条答案
按热度按时间aamkag611#
您收到的错误是由于MariaDB认为您没有被授权连接到服务器。这意味着您尚未为Node.js应用创建数据库用户,或者该用户的赠款不正确。
解决这个问题的一个简单方法是为Node.js应用程序创建一个单独的用户。您可以通过将以下SQL写入文件并将卷装入
/docker-entrypoint-initdb.d
来自动执行此操作。相应地更改用户名和密码,并从
ALL
权限中减少给定的权限。您还可以将主机名%
更改为特定的IP地址或主机名。cgh8pdjw2#
简单地运行这个SQL查询:
(假设您以root用户身份连接)
xriantvc3#
问题是mysql模块不正确。
然后在代码中正常使用它:
祝你一切顺利。
注意:只能将mysql改为mysql2