无法访问mysql docker

Quo*_*Dat 12 mysql docker docker-compose

我正在使用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
    
    Run Code Online (Sandbox Code Playgroud)
  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容器?

小智 19

您可以在启动 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
Run Code Online (Sandbox Code Playgroud)

在撰写文件中,它将是:

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
Run Code Online (Sandbox Code Playgroud)

  • 嗨,当我使用环境“MYSQL_ROOT_HOST:%”时,我收到消息:“错误:yaml.scanner.ScannerError:在扫描下一个令牌时发现字符'%'无法在“./docker-compose”中启动任何令牌.yml”,第 16 行,第 24 列”,您能帮帮我吗? (5认同)
  • 这是否仍然适用于 Docker 版本 18.09.1 和“mysql:5.7”?我刚刚尝试过,确认容器正确设置了 ENV_VAR,但我得到了同样的错误。 (2认同)
  • MYSQL_ROOT_HOST: '%' - % 需要用字符串括起来 (2认同)