Нет доступа к докеру mysql

Я использую docker-compose для создания mysql контейнера. Я получаю IP-адрес хоста 172.21.0.2 . Но когда я подключаю mysql. Я получаю сообщение об ошибке:

  1. Мой 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
    
  2. Получить IP-адрес моего хоста docker inspect db_mysql_1 | grep IPAddress

    «IPAddress»: «172.21.0.2»,

  3. Доступ к mysql: mysql -h 172.21.0.2 -P 3306 -u root -proot .

    ОШИБКА 1130 (HY000): узлу 172.21.0.1 не разрешено подключаться к этому серверу MySQL

Как я могу подключиться к контейнеру mysql?

6
задан 1 August 2016 в 08:08
5 ответов

Когда вы подключаетесь к серверу 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.

.
2
ответ дан 3 December 2019 в 00:12

Вы можете передать дополнительную переменную среды при запуске контейнера 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: %
9
ответ дан 3 December 2019 в 00:12

Вот так это сработало для меня:

MYSQL_ROOT_HOST: '%'
3
ответ дан 15 October 2020 в 22:58

В моем случае. Я удалил конфигурацию томов, и это сработало.

2
ответ дан 26 January 2021 в 09:43

Вот что сработало для меня:

docker exec -it mysql1 mysql -u root -p
update mysql.user set host='%' where user='root' and host = 'localhost';
flush privileges;

замените mysql1 на имя вашего контейнера.

P.S. Я не использую docker-compose.

1
ответ дан 9 May 2021 в 20:10

Теги

Похожие вопросы