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
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:
"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)