Sie können beim Starten des MySQL-Containers eine zusätzliche Umgebungsvariable übergeben MYSQL_ROOT_HOST=<ip> dadurch wird ein Root-Benutzer mit der Berechtigung zum Anmelden von der angegebenen IP-Adresse erstellt. Für den Fall, dass Sie die Anmeldung von einer beliebigen IP-Adresse aus zulassen möchten, können Sie Folgendes angeben MYSQL_ROOT_HOST=%.
Dies funktioniert nur für neu erstellte Container.
Beim Spinnen neuer Behälter:
docker run --name some-mysql -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
In der Compose-Datei wäre es:
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: '%' # needs to be enclosed with quotes
Wenn Sie eine Verbindung zu einem MySQL-Server herstellen, wird überprüft, ob dies der Fall ist GRANT tabelle (die Tabelle "Benutzer" in der Datenbank "mysql| auf dem MySQL-Server) gegen die IP-Adresse des verbindenden MySQL-Clientcomputers. Wenn es KEINE PASSENDEN EINTRÄGE in der Spalte "host" in der Tabelle "user" in der Datenbank "mysql", MySQL wird DIE VERBINDUNG SOFORT SCHLIEßEN mit ERROR 1130.
Überprüfen Sie, ob der Client auf Port 3306 (den MySQL-Port) auf dem Datenbankserver zugreifen kann:
telnet 172.21.0.2 3306Trying ::1...Connected to 172.21.0.2.Escape character is '^]'.
Sie sollten sich beim MySQL-Server anmelden und "mysql" ausführen, um die Grants-Tabelle zu überprüfen:
"root" is berechtigt, von mehreren IP-Adressen aus eine Verbindung herzustellen, jedoch nicht von der Client-IP 172.21.0.1. Fügen Sie also einfach GRANT-Zugriff von dieser IP hinzu:
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)