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:
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
Obtenir mon IP hôte docker inspect db_mysql_1 | grep IPAddress
"IPAddress": "172.21.0.2",
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?
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: %
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.