Domyślnie po wdrożeniu MySQL ma następujące ograniczenia połączeń:
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)
Najwyraźniej ze względów bezpieczeństwa nie będzie można połączyć się z nim poza obrazem dockera. Jeśli chcesz to zmienić, aby umożliwić rootowi łączenie się z dowolnego hosta (powiedzmy, w celach programistycznych), wykonaj:
-
Uruchom obraz mysql ze wszystkimi wymaganymi mapowaniami portów:
docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7
lub, jeśli wymagane jest pełne mapowanie portów:
docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
-
Jeśli to jest świeża instalacja - pobierz domyślne hasło:
docker logs mysql57 2>&1 | grep GENERATED
-
Połącz za pomocą
mysql
klienta bezpośrednio do mysqld w docker:docker exec -it mysql57 mysql -uroot -p
-
Jeśli jest to nowa instalacja, zostaniesz poproszony o zmianę hasła za pomocą
ALTER USER
Komenda. Zrób to. -
Uruchom SQL:
update mysql.user set host = '%' where user='root';
-
Zamknij
mysql
klienta. -
Uruchom ponownie kontener:
docker restart mysql57
Teraz będziesz mógł połączyć się z MySQL Workbench do
host: `0.0.0.0`
port: `3306`
Po wszystkich zmianach zapytanie pokaże:
select host, user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+