无法访问mysqldocker

无法访问mysqldocker

我正在使用它docker-compose来创建mysql容器。我获取了主机 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

    "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 容器?

答案1

您可以在启动 MySQL 容器时传递额外的环境变量,MYSQL_ROOT_HOST=<ip>这将创建一个具有从给定 IP 地址登录权限的 root 用户。如果您想允许从任何 IP 登录,您可以指定MYSQL_ROOT_HOST=%

这只对新创建的容器有效。

旋转新容器时:

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: '%'  # needs to be enclosed with quotes

答案2

对我来说,这种方法很有效:

MYSQL_ROOT_HOST: '%'

答案3

就我的情况而言。我删除了卷配置,它就起作用了。

答案4

当你连接到 MySQL 服务器时,它会检查其GRANT表(MySQL 服务器上的“mysql|”数据库中的“用户”表)与连接的 MySQL 客户端计算机的 IP 地址。如果有没有匹配的条目在“mysql”数据库的“用户”表中的“主机”列中,MySQL 将立即关闭连接ERROR 1130

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

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

您应该登录到 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      |

“根”授权从多个 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)

然后,检查您的连接。

相关内容