首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ER_HOST_NOT_PRIVILEGED - docker容器无法连接到mariadb

ER_HOST_NOT_PRIVILEGED - docker容器无法连接到mariadb
EN

Stack Overflow用户
提问于 2017-11-14 01:50:19
回答 2查看 9.9K关注 0票数 2

我正在尝试使用docker容器来处理mariadb和node.js图像。容器将使用/home/mysql中的现有数据库。然而,当容器启动时,我在node.js中得到了这个“连接失败”的错误:

代码语言:javascript
复制
Error: ER_HOST_NOT_PRIVILEGED: 
Host '172.18.0.5' is not allowed to connect to this MariaDB server

这是我的docker-compose.yml:

代码语言:javascript
复制
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实例:

代码语言:javascript
复制
    $ 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文件中显式地将用户设置为mysql,/home/mysql中的以下三个文件:ib_logfile0ib_logfile1ib_buffer_pool仍然位于systemd-journal-remote组下,我怀疑这与连接失败有关。(reference)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-14 16:04:41

您收到的错误是由于MariaDB认为您未被授权连接到服务器而导致的。这意味着您尚未为Node.js应用程序创建数据库用户,或者该用户的授权不正确。

解决此问题的一种简单方法是为Node.js应用程序创建一个单独的用户。您可以通过将以下SQL写入文件并将卷挂载到/docker-entrypoint-initdb.d中来自动执行此操作。

代码语言:javascript
复制
CREATE USER 'my-app-user'@'%' IDENTIFIED BY 'my-app-password';
GRANT ALL ON *.* TO 'my-app-user'@'%';

相应地更改用户名和密码,并从ALL权限中减少给定的权限。您还可以将通配符主机名%更改为特定的IP地址或主机名。

票数 9
EN

Stack Overflow用户

发布于 2019-01-31 05:29:53

只需运行以下sql查询:

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'

(假设您是以root用户身份连接)

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

https://stackoverflow.com/questions/47270505

复制
相关文章

相似问题

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