Vom Container mit Django kann keine Verbindung zum MySQL-Docker-Container hergestellt werden

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.3ist 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.3ist die IP des Containers mit der App? MYSQL_ROOT_HOSTwird nicht benötigt.

Guess you like

Origin blog.csdn.net/qq_41879696/article/details/130507585