web-dev-qa-db-fra.com

Impossible d'accéder à docker mysql

J'utilise docker-compose Pour créer mysql conteneur. J'obtiens l'IP de l'hôte 172.21.0.2. Mais quand je connecte mysql. Je reçois une erreur:

  1. Mon docker-compose.yml:

    version: '2'
    services:
    
    ### Mysql container
        mysql:
          image: mysql:latest
          ports:
           - "3306:3306"
          volumes:
           - /var/lib/mysql:/var/lib/mysql
         environment:
           MYSQL_ROOT_PASSWORD: root
           MYSQL_DATABASE: test_db
           MYSQL_USER: test
           MYSQL_PASSWORD: test_pass
    
  2. Obtenir mon IP hôte docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

  3. Accédez à mysql: mysql -h 172.21.0.2 -P 3306 -u root -proot.

    ERROR 1130 (HY000): Host '172.21.0.1' is not allowed to connect to this MySQL server

Comment puis-je me connecter au conteneur mysql?

7
Quoc Dat

Vous pouvez transmettre une variable d'environnement supplémentaire lors du démarrage du conteneur MySQL MYSQL_ROOT_Host=<ip> cela créera un utilisateur root autorisé à se connecter à partir d'une adresse IP donnée. Dans le cas où vous souhaitez autoriser la connexion à partir de n'importe quelle adresse IP, vous pouvez spécifier MYSQL_ROOT_Host=%.

Cela ne fonctionnera que pour les conteneurs nouvellement créés.

Lors de la rotation d'un nouveau conteneur:

docker run --name some-mysql -e MYSQL_ROOT_Host=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

Dans le fichier de composition, ce serait:

version: '2'
services:

  ### Mysql container
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - /var/lib/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      MYSQL_USER: test
      MYSQL_PASSWORD: test_pass
      MYSQL_ROOT_Host: %
11
Mr.Coffee

Lorsque vous vous connectez à un serveur MySQL, il vérifie sa table GRANT (la table "utilisateur" dans la base de données "mysql | sur le serveur MySQL) par rapport à l'adresse IP de la machine cliente MySQL qui se connecte. S'il y a - AUCUNE ENTRÉE CORRESPONDANTE dans la colonne "Hôte" de la table "utilisateur" de la base de données "mysql", MySQL FERMERA IMMÉDIATEMENT LA CONNEXION avec ERROR 1130.

Vérifiez si le client peut accéder au port 3306 (le port MySQL) sur le serveur de base de données:

telnet 172.21.0.2 3306
Trying ::1...
Connected to 172.21.0.2.
Escape character is '^]'.

Vous devez vous connecter au serveur MySQL et exécuter "mysql" pour vérifier la table des subventions:

# mysql mysql

mysql> SELECT Host,user FROM user;
+-----------------+-----------+
| Host            | user      |
+-----------------+-----------+
| 172.21.0.5      | root      |
| 172.21.0.4      | root      |
| 127.0.0.1       | root      |
| ::1             | root      |
| localhost       | root      |

"root" est autorisé à se connecter à partir de plusieurs adresses IP, mais pas à partir de l'IP client 172.21.0.1. Donc, ajoutez simplement l'accès GRANT à partir de cette IP:

mysql> GRANT ALL PRIVILEGES ON root.* TO 'your_db'@'172.21.0.1' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Ensuite, vérifiez votre connexion.

2
malyy