Não é possível acessar o mysql docker

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:

  1. 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
  2. Obtenha meu IP do host docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

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