Я использую 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
В составном файле это будет:
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: %
Когда вы подключаетесь к серверу MySQL, он проверяет, GRANT
таблицу (таблица "user" в базе данных "mysql | на сервере MySQL)" с IP-адресом подключенного клиентского компьютера MySQL. Если есть НЕТ СООТВЕТСТВУЮЩИХ ЗАПИСЕЙ в столбце "host" таблицы "user" в базе данных "mysql", MySQL НЕМЕДЛЕННО ЗАКРЫВАЕТ СОЕДИНЕНИЕ с участием ERROR 1130
.
Проверьте, может ли клиент получить доступ к порту 3306 (порт MySQL) на сервере базы данных:
telnet 172.21.0.2 3306
Trying ::1...
Connected to 172.21.0.2.
Escape character is '^]'.
Вы должны войти на сервер MySQL и запустить mysql, чтобы проверить таблицу грантов:
# mysql mysql
mysql> 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. Итак, просто добавьте GRANT доступ с этого 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)
Затем проверьте ваше соединение.