Estou usando docker-compose
criar mysql
recipiente. Eu recebo IP do host 172.21.0.2
.Mas quando eu conecto o mysql. Eu recebo erro:
-
As 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
-
Obtenha meu IP do host docker inspect db_mysql_1 | grep IPAddress
"IPAddress": "172.21.0.2",
-
Acesso 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
Como posso me conectar ao contêiner mysql?
Você pode passar uma variável de Ambiente extra ao iniciar o contêiner MySQL MYSQL_ROOT_HOST=<ip>
isso criará um usuário raiz com permissão para fazer login a partir de determinado endereço IP. No caso em que você deseja permitir o login de qualquer IP, você pode especificar MYSQL_ROOT_HOST=%
.
Isso funcionará apenas para contêineres recém-criados.
Ao girar o recipiente novo:
docker run --name some-mysql -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
No arquivo de composição, seria:
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
No meu caso. Eu apaguei a configuração de volumes e funcionou.
Desta forma, funcionou para mim:
MYSQL_ROOT_HOST: '%'
Isso é o que funcionou para mim:
docker exec -it mysql1 mysql -u root -pupdate mysql.user set host='%' where user='root' and host = 'localhost';flush privileges;
alterar mysql1
para o nome do seu contêiner.
P. S: Eu não estou usando docker-compose
.
Quando você se conecta a um servidor MySQL, ele verifica que é GRANT
tabela (a tabela "usuário" no " mysql / banco de dados no servidor MySQL) em relação ao endereço IP da máquina cliente MySQL de conexão. Se houver SEM ENTRADAS CORRESPONDENTES na coluna "host" na tabela "usuário" no banco de dados" mysql, O MySQL fechará imediatamente a conexão com ERROR 1130
.
Verifique se o cliente é capaz de chegar à porta 3306 (A porta MySQL) no servidor de banco de dados:
telnet 172.21.0.2 3306Trying ::1...Connected to 172.21.0.2.Escape character is '^]'.
Você deve fazer login no servidor MySQL e executar "mysql" para verificar a tabela grants:
# 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 |
"raiz" e autorizado a se conectar a partir de vários endereços IP, mas não do cliente IP 172.21.0.1. Então, basta adicionar GRANT access a partir desse 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)
Então, verifique sua conexão.