No se puede acceder a mysql docker

Estoy usando docker-compose crear mysql contenedor. Obtengo la IP del host 172.21.0.2.Pero cuando conecto mysql. Tengo un error:

  1. Mi 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. Obtener mi IP de host docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

  3. Acceso a 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

¿Cómo puedo conectarme al contenedor mysql?

Puede pasar una variable de entorno adicional al iniciar el contenedor MySQL MYSQL_ROOT_HOST=<ip> esto creará un usuario root con permiso para iniciar sesión desde una dirección IP determinada. En caso de que desee permitir el inicio de sesión desde cualquier IP, puede especificar MYSQL_ROOT_HOST=%.

Esto solo funcionará para contenedores recién creados.

Al girar un recipiente nuevo:

docker run --name some-mysql -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

En el archivo de composición sería:

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

En mi caso. Eliminé la configuración de volúmenes y funcionó.

De esta manera funcionó para mí:

MYSQL_ROOT_HOST: '%'

Esto es lo que funcionó para mí:

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

cambio mysql1 al nombre de su contenedor.

PD: No estoy usando docker-compose.

Cuando se conecta a un servidor MySQL, comprueba que GRANT tabla (la tabla" usuario "en la base de datos" mysql| en el servidor MySQL) contra la dirección IP de la máquina cliente MySQL que se conecta. Si hay NO HAY ENTRADAS COINCIDENTES en la columna "host" de la tabla "usuario" de la base de datos" mysql", MySQL CERRARÁ INMEDIATAMENTE LA CONEXIÓN con ERROR 1130.

Compruebe si el cliente puede llegar al puerto 3306 (el puerto MySQL) en el servidor de la base de datos:

telnet 172.21.0.2 3306Trying ::1...Connected to 172.21.0.2.Escape character is '^]'.

Debe iniciar sesión en el servidor MySQL y ejecutar "mysql" para verificar la tabla de concesiones:

# 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      |

"arraigar" ser autorizado para conectarse desde varias direcciones IP, pero no desde la IP del cliente 172.21.0.1. Por lo tanto, solo agregue GRANT access desde esa 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)

Luego, verifique su conexión.