По подразбиране след внедряването MySQL има следните ограничения за връзка:
mysql> select host, user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
4 rows in set (0.00 sec)
Очевидно за целите на сигурността няма да можете да се свържете с него извън изображението на docker. Ако трябва да промените това, за да позволите на root да се свързва от всеки хост (да речем, за целите на разработката), направете:
-
Стартирайте вашето mysql изображение с всички необходими съпоставяния на портове:
docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7
или, ако се изисква пълното картографиране на портовете:
docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
-
Ако това е новата инсталация - вземете паролата по подразбиране:
docker logs mysql57 2>&1 | grep GENERATED
-
Свържете се с помощта на
mysql
клиент директно към mysqld в docker:docker exec -it mysql57 mysql -uroot -p
-
Ако това е новата инсталация, ще бъдете помолени да промените паролата с помощта на
ALTER USER
команда. Направи го. -
Изпълнете SQL:
update mysql.user set host = '%' where user='root';
-
Излезте от
mysql
клиент. -
Рестартирайте контейнера:
docker restart mysql57
Сега ще можете да се свържете от MySQL Workbench към
host: `0.0.0.0`
port: `3306`
След всички промени заявката ще покаже:
select host, user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+