无法访问mysql docker

我正在使用docker-compose创buildmysql容器。 我得到主机IP 172.21.0.2 。 但是当我连接MySQL。 我收到错误:

  1. 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. 让我的主机IP docker inspect db_mysql_1 | grep IPAddress docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

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

我怎样才能连接到MySQL容器?

您可以在启动MySQL容器时传递额外的环境variablesMYSQL_ROOT_HOST=<ip>这将创build一个root用户,允许从给定的IP地址login。 如果你想允许从任何IP地址login,你可以指定MYSQL_ROOT_HOST=%

这只适用于新创build的容器。

纺纱新容器时:

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

在撰写文件中将是:

 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: % 

当连接到MySQL服务器时,它会根据连接的MySQL客户端机器的IP地址检查它是否是GRANT表(MySQL服务器上“mysql”数据库中的“user”表);如果“ mysql“数据库中的”user“表中的”host“列, MySQL将立即closuresERROR 1130 连接

检查客户端是否能够访问数据库服务器上的端口3306(MySQL端口):

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

你应该login到MySQL服务器,并运行“mysql”来检查授权表:

 # 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” 授权从多个IP地址连接,但不能从客户端IP 172.21.0.1连接。 所以,只需从该IP添加GRANT访问权限即可:

 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) 

然后,检查你的连接。