[英]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_logfile0
, ib_logfile1
和ib_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.