django.db.utils.OperationalError: (1130, „192.168.1.66‘ darf keine Verbindung zu diesem MySQL-Server herstellen“)
Wenn ich versuche, eine Verbindung vom Docker-Container, auf dem meine Django-Anwendung ausgeführt wird, zu dem Container herzustellen, auf dem MySQL ausgeführt wird, erhalte ich die folgende Fehlermeldung:
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '172.17.0.2' (111)")
So führe ich den MySQL-Container aus:
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_ROOT_HOST=172.17.0.2 -d mysql/mysql-server:5.7
Wenn ich nicht spezifiziere MYSQL_ROOT_HOST
, erhalte ich diese Fehlermeldung, wenn ich versuche, vom Container aus eine Verbindung mit der Django-Anwendung herzustellen:
django.db.utils.OperationalError: (1130, "Host '172.17.0.3' is not allowed to connect to this MySQL server")
Das ist mein Django-Setup:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '172.17.0.2',
'PORT': '',
}
}
Ich habe überprüft, dass der MySQL-Container IP 172.17.0.2 verwendet:
$ docker inspect mysql |grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
Wenn ich versuche, eine Verbindung von einem Docker-Container, auf dem meine Django-App ausgeführt wird, zu einem Container herzustellen, auf dem MySQL ausgeführt wird, erhalte ich die folgende Fehlermeldung:
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '172.17.0.2' (111)")
So führe ich den MySQL-Container aus:
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_ROOT_HOST=172.17.0.2 -d mysql/mysql-server:5.7
Wenn ich nicht spezifiziere MYSQL_ROOT_HOST
, erhalte ich diese Fehlermeldung, wenn ich versuche, vom Container aus eine Verbindung mit der Django-App herzustellen:
django.db.utils.OperationalError: (1130, "Host '172.17.0.3' is not allowed to connect to this MySQL server")
Hier sind meine Django-Einstellungen:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '172.17.0.2',
'PORT': '',
}
}
Ich habe überprüft, dass der MySQL-Container IP 172.17.0.2 verwendet:
$ docker inspect mysql |grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
Aktualisierungszeit: 25.04.2022 22:04
Zufriedenstellendste Antwort
Ich muss dem Root-Benutzer des Django-Containers Berechtigungen für den Zugriff auf die Datenbank erteilen:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.3' IDENTIFIED BY 'password' WITH GRANT OPTION;
SET PASSWORD FOR root@'172.17.0.3' = PASSWORD('root');
FLUSH PRIVILEGES;
Wo 172.17.0.3
ist die IP des Containers mit der App? MYSQL_ROOT_HOST
.
Ich musste dem Root-Benutzer am Django-Container Berechtigungen für den Zugriff auf die Datenbank erteilen:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.3' IDENTIFIED BY 'password' WITH GRANT OPTION;
SET PASSWORD FOR root@'172.17.0.3' = PASSWORD('root');
FLUSH PRIVILEGES;
Wo 172.17.0.3
ist die IP des Containers mit der App? MYSQL_ROOT_HOST
wird nicht benötigt.