2017-11-13 7 views
0

Ich versuche, einen Docker-Container für die Arbeit mit Mariadb- und node.js-Images zu erhalten. Der Container wird eine vorhandene Datenbank in /home/mysql verwenden. Wenn jedoch der Container gestartet wird, ich bin dies immer "nicht bestanden verbinden" Fehler in node.js:ER_HOST_NOT_PRIVILEGED - Docker-Container kann keine Verbindung zu Mariadb herstellen

Error: ER_HOST_NOT_PRIVILEGED: 
Host '172.18.0.5' is not allowed to connect to this MariaDB server 

Hier ist mein 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" 

Nach diesen thread Lesen Ich habe festgestellt, dass mysql tatsächlich ausgeführt wird, aber andere Dienste nicht verbinden können:

Dies sind einige der Schritte, die ich überprüft habe. Wie Sie sehen können, kann ich auf die MySQL-Instanz anmelden:

$ docker exec -it 552aae9ea09c bash 

    [email protected]:/$ 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) 


[email protected]:/$ 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) 

Eine Sache zu beachten ist, dass, obwohl ich ausdrücklich den Benutzer mysql in der yml Datei, diese drei Dateien in/home gesetzt haben/mysql: ib_logfile0, ib_logfile1 sind ib_buffer_pool noch unter der Gruppe von systemd-journal-remote, die ich vermute, etwas mit dem Verbindungsfehler zu tun hat (reference)

Antwort

1

der Fehler, den Sie durch die Tatsache veranlasst wird, erhalten, dass MariaDB denkt, dass Sie nicht. berechtigt, eine Verbindung zum Server herzustellen. Dies bedeutet, dass Sie keinen Datenbankbenutzer für die Node.js-Anwendung erstellt haben oder die Berechtigungen für diesen Benutzer nicht korrekt sind.

Eine narrensichere Möglichkeit, dies zu lösen, besteht darin, einen separaten Benutzer für die Anwendung Node.js zu erstellen. Sie können dies automatisieren, indem Sie das folgende SQL in eine Datei schreiben und das Volume in /docker-entrypoint-initdb.d mounten.

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

Ändern Sie den Benutzernamen und das Passwort entsprechend und reduzieren die angegebenen Privilegien vom ALL Privileg. Sie können auch den Platzhalter-Hostnamen % in eine bestimmte IP-Adresse oder einen Hostnamen ändern.

Verwandte Themen