簡體   English   中英

ER_HOST_NOT_PRIVILEGED-Docker容器無法連接到mariadb

[英]ER_HOST_NOT_PRIVILEGED - docker container fails to connect to mariadb

我正在嘗試使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"

閱讀此線程后 ,我發現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文件中將用戶明確設置為mysql ,但/ home / mysql中的以下三個文件: ib_logfile0ib_logfile1ib_buffer_pool仍在systemd-journal-remote組下。懷疑與連接失敗有關。( 參考

您收到的錯誤是由MariaDB認為您無權連接到服務器引起的。 這意味着您尚未為Node.js應用程序創建數據庫用戶,或者該用戶的授權不正確。

一種簡單的解決方法是為Node.js應用程序創建一個單獨的用戶。 您可以通過將以下SQL寫入文件並將卷安裝到/docker-entrypoint-initdb.d來自動執行此/docker-entrypoint-initdb.d

CREATE USER 'my-app-user'@'%' IDENTIFIED BY 'my-app-password';
GRANT ALL ON *.* TO 'my-app-user'@'%';

相應地更改用戶名和密碼,並從ALL特權中減少給定的特權。 您還可以將通配符主機名%更改為特定的IP地址或主機名。

只需運行以下sql查詢:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'

(假設您以root用戶身份進行連接)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM