如何使用Navicat或MySQL Workbench将MySQL与Docker连接?

时间:2019-05-29 09:00:15

标签: mysql docker mysql-workbench navicat

我正在使用MySQL Docker映像,并且可以使用php中的mysqli_connect('mysql', 'docker', 'docker');连接到该Docker

这里是docker ps

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                          NAMES
c271f8e68378        afraidjpg/nginx:nginx   "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:80->80/tcp, 0.0.0.0:10086->10086/tcp   nginx
92d7c923f777        afraidjpg/php:php56     "docker-php-entrypoi…"   2 hours ago         Up 2 hours          0.0.0.0:9000->9000/tcp                         php
68b818bd68c4        afraidjpg/mysql:mysql   "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 33060/tcp              mysql

启动PHP Docker时,我使用--link mysql选项。

MySQL Docker的

IP为 172.17.0.2

我的Mac的IP为 192.168.1.50

这是mysql中的用户:

mysql> select User, Host from mysql.user;
+--------+-----------+
| User   | Host      |
+--------+-----------+
| docker | %         |
| root   | localhost |
+--------+-----------+
2 rows in set (0.00 sec)

然后我尝试将mysql与navicat和mysql-workbench连接起来

主机:192.168.1.50,用户:docker,传递:docker Access denied for user 'docker'@'%%' (using password: YES)

主机:127.0.0.1,用户:docker,通过:docker Access denied for user 'docker'@'%%' (using password: YES)

主机:172.17.0.2,用户:docker,传递:docker Can't connect to MySQL server on '172.17.0.2

所有人都遇到Access denied for user 'docker'@'%%' (using password: YES)错误

如果我尝试将用户从 docker 更改为 root ,错误将变为Access denied for user 'docker'@'172.17.0.1' (using password: YES) < / p>

我之前找到了一些文章,并按照他们的步骤进行,但始终失败。我不在哪里错了

这是一些屏幕截图

enter image description here

enter image description here

enter image description here

更新 我无法从本地ping到docker,并且docker中没有ping命令,因此我无法测试从docker到本地的ping

zk ~/Documents/PHP/www/docker $ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

更多更新

我可以在终端mysql -udocker -p --portocol=tcp中使用命令连接到mysql

更多详细信息

错误消息是Access denied for user 'docker'@'%%' (using password: YES),它是said @'%%',我知道'%'是什么,但是'%%'是什么意思?

1 个答案:

答案 0 :(得分:1)

请从连接的容器尝试将主机作为mysql而不是localhost。如果您在Windows上,请尝试192.168.99.100作为主机。

如果仍然有问题,请尝试使用 mysql-compose.yml

重新测试
version: "3.1"
services:

  mysql:
    image: mysql:5.7.22
    command: "--innodb_use_native_aio=0"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    env_file:
      - .env
    ports:
      - "3306:3306"
    volumes:
      - /var/database/docker/common:/var/lib/mysql
    networks:
      - mysqlnet
      - mysqlnetfpm

networks:
  mysqlnet:
    driver: bridge
  mysqlnetfpm:
    driver: bridge

注意:在运行新的mysql容器之前,请不要忘记删除旧的mysqldata文件。

现在,您可以将用户名用作root,将密码用作root,对于内部容器(连接的容器),将主机用作mysql。

如果您尝试从docker外部进行连接,请尝试将主机设为localhost127.0.0.1或您的公共docker ip