Я использую docker-compose
для создания mysql
контейнера.
Я получаю IP-адрес хоста 172.21.0.2
.
Но когда я подключаю mysql. Я получаю сообщение об ошибке:
Мой docker-compose.yml
:
версия: '2'
Сервисы:
### Контейнер MySQL
mysql:
изображение: mysql: последний
порты:
- «3306: 3306»
объемы:
- / var / lib / mysql: / var / lib / mysql
среда:
MYSQL_ROOT_PASSWORD: корень
MYSQL_DATABASE: test_db
MYSQL_USER: тест
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
.
ОШИБКА 1130 (HY000): узлу 172.21.0.1 не разрешено подключаться к этому серверу MySQL
Как я могу подключиться к контейнеру mysql?
Когда вы подключаетесь к серверу MySQL, он сверяет таблицу GRANT
("user" таблица в "базе данных mysql| на сервере MySQL") с IP-адресом подключающейся клиентской машины MySQL. Если в колонке "host" таблицы "user" в БД "mysql" есть NO MATCHING ENTRIES, то MySQL IMMEDIATELY CLOSE THE CONNECTION с 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 |
"root" is уполномочен на соединение с нескольких 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)
Then, check your connection.
. Вы можете передать дополнительную переменную среды при запуске контейнера MySQL MYSQL_ROOT_HOST =
, это создаст пользователя 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: %
В моем случае. Я удалил конфигурацию томов, и это сработало.