Я использую docker-compose
создавать mysql
контейнер. Я получаю IP-адрес хоста 172.21.0.2
.Но когда я подключаю mysql. Я получаю ошибку:
-
Мой docker-compose.yml
:
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
-
Получить IP-адрес моего хоста docker inspect db_mysql_1 | grep IPAddress
"IPAddress": "172.21.0.2",
-
Доступ к mysql: mysql -h 172.21.0.2 -P 3306 -u root -proot
.
ERROR 1130 (HY000): Host '172.21.0.1' is not allowed to connect to this MySQL server
Как я могу подключиться к контейнеру mysql?
Вы можете передать дополнительную переменную среды при запуске контейнера MySQL MYSQL_ROOT_HOST=<ip>
это создаст пользователя root с разрешением на вход с заданного IP-адреса. В случае, если вы хотите разрешить вход с любого IP-адреса, вы можете указать MYSQL_ROOT_HOST=%
.
Это будет работать только для вновь созданных контейнеров.
При вращении нового контейнера:
docker run --name some-mysql -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
В файле compose это было бы:
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
В моем случае. Я удалил конфигурацию томов, и это сработало.
Таким образом, это сработало для меня:
MYSQL_ROOT_HOST: '%'
Это то, что сработало для меня:
docker exec -it mysql1 mysql -u root -pupdate mysql.user set host='%' where user='root' and host = 'localhost';flush privileges;
менять mysql1
к вашему имени контейнера.
P.S: Я не использую docker-compose
.
Когда вы подключаетесь к серверу MySQL, он проверяет, что он GRANT
таблица (таблица "user" в "mysql| database на сервере MySQL) против IP-адреса подключающегося клиентского компьютера MySQL. Если есть НЕТ СОВПАДАЮЩИХ ЗАПИСЕЙ в столбце "хост" в таблице "пользователь" в базе данных "mysql", MySQL НЕМЕДЛЕННО ЗАКРОЕТ СОЕДИНЕНИЕ с ERROR 1130
.
Проверьте, может ли клиент получить доступ к порту 3306 (порт MySQL) на сервере базы данных:
telnet 172.21.0.2 3306Trying ::1...Connected to 172.21.0.2.Escape character is '^]'.
Вы должны войти на сервер MySQL и запустить "mysql", чтобы проверить таблицу грантов:
# mysql mysqlmysql> SELECT host,user FROM user;+-----------------+-----------+| host | user |+-----------------+-----------+| 172.21.0.5 | root || 172.21.0.4 | root || 127.0.0.1 | root || ::1 | root || localhost | root |
"корень" является авторизован для подключения с нескольких IP-адресов, но не с клиентского IP 172.21.0.1. Итак, просто добавьте ПРЕДОСТАВИТЬ доступ с этого IP:
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)
Затем проверьте свое соединение.