Não é possível acessar o docker do mysql

3

Estou usando docker-compose para criar o contêiner mysql . Eu recebo o IP do host 172.21.0.2 . Mas quando eu conecto o mysql. Eu recebo erro:

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

    "IPAddress": "172.21.0.2",

  3. Acesse o 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 container mysql?

    
por Quoc Dat 01.08.2016 / 06:44

2 respostas

2

Você pode passar uma variável de ambiente extra ao iniciar o contêiner do MySQL MYSQL_ROOT_HOST=<ip> , isso criará um usuário root com permissão para efetuar login a partir do endereço IP fornecido. Caso você queira permitir o login de qualquer IP, você pode especificar MYSQL_ROOT_HOST=% .

Isso funcionará apenas para contêineres recém-criados.

Ao girar um novo contêiner:

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: %
    
por 09.02.2017 / 16:06
0

Quando você se conecta a um servidor MySQL, ele verifica sua GRANT table (a tabela "user" no "banco de dados mysql | no servidor MySQL) em relação ao endereço IP da máquina cliente do MySQL. Se houver < strong> NENHUMA ENTRADA DE CORRESPONDÊNCIA na coluna "host" na tabela "user" do banco de dados "mysql", o MySQL irá IMEDIATAMENTE FECHAR A CONEXÃO com ERROR 1130 .

Verifique se o cliente é capaz de acessar a porta 3306 (a porta do MySQL) no servidor de banco de dados:

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

Você deve efetuar login no servidor MySQL e executar o "mysql" para verificar a tabela de permissões:

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

"root" é autorizado a se conectar a partir de vários endereços IP, mas não do IP do cliente 172.21.0.1. Então, basta adicionar o acesso GRANT 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)

Em seguida, verifique sua conexão.

    
por 29.09.2016 / 09:17