如何使用 Navicat 或 MySQL Workbench 连接 MySQL 和 Docker?
How to connect MySQL with Docker using Navicat or MySQL Workbench?
我正在使用 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
我在启动时使用 --link mysql
选项 PHP Docker。
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)
然后我尝试用navicat连接mysql和mysql-workbench
主机:192.168.1.50, user:docker, pass:docker Access denied for user 'docker'@'%%' (using password: YES)
主机:127.0.0.1, user:docker, pass:docker Access denied for user 'docker'@'%%' (using password: YES)
host:172.17.0.2, user:docker, pass: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)
之前找了一些文章,也照着他们的步骤做了,但总是失败。我不知道哪里错了
这里有一些截图
更新
我无法从本地 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 @'%%'
,我知道 '%' 是什么,但是 '%%' 是什么意思?
尝试将主机设为 mysql
而不是已连接容器中的本地主机。如果您在 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容器之前不要忘记删除旧的mysql数据文件。
现在您可以使用 root
的用户名,root
的密码,内部容器(附加容器)使用 mysql.
的主机
如果您尝试从 docker 外部连接,请尝试使用主机作为 localhost
或 127.0.0.1
或您的 public docker ip
.
运行 下面的命令
docker exec -it {mysql_container_name} bash
我正在使用 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
我在启动时使用 --link mysql
选项 PHP Docker。
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)
然后我尝试用navicat连接mysql和mysql-workbench
主机:192.168.1.50, user:docker, pass:docker Access denied for user 'docker'@'%%' (using password: YES)
主机:127.0.0.1, user:docker, pass:docker Access denied for user 'docker'@'%%' (using password: YES)
host:172.17.0.2, user:docker, pass: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)
之前找了一些文章,也照着他们的步骤做了,但总是失败。我不知道哪里错了
这里有一些截图
更新 我无法从本地 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
更多详情
错误信息是 Access denied for user 'docker'@'%%' (using password: YES)
,它 said @'%%'
,我知道 '%' 是什么,但是 '%%' 是什么意思?
尝试将主机设为 mysql
而不是已连接容器中的本地主机。如果您在 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容器之前不要忘记删除旧的mysql数据文件。
现在您可以使用 root
的用户名,root
的密码,内部容器(附加容器)使用 mysql.
如果您尝试从 docker 外部连接,请尝试使用主机作为 localhost
或 127.0.0.1
或您的 public docker ip
.
运行 下面的命令
docker exec -it {mysql_container_name} bash