Назад | Перейти на главную страницу

Не удается получить доступ к докеру mysql

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

  1. Мой 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
    
  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.

    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)

Затем проверьте ваше соединение.