1、虚拟机(云服务器)连接docker中mysql

明确概念:内网ip和外网ip

内网IP: 顾名思义,就是在内网中使用的ip地址,什么是内网,一个路由器下的电脑都处在一个内网中,也称之为局域网,内网ip是可以重复的,因为局域网可以有很多个,当然出了这个局域网,就无法访问这个内网ip了。

公网ip: 这个ip的功能很强大,他是互联网中唯一的地址,不会出现重复的情况,并且可以被互联网中其他的电脑直接访问到,所以一般作为服务器的电脑,我们都要保证这台电脑有一个公网ip,这样才能更好的给外网用户提供服务。
centos7 查看内网的ip:使用ifconfig或在后面加上参数,都可以查看内网的ip:
在这里插入图片描述
查看外网的ip: 使用curl ifconfig.me命令可以查看外网的ip,在这里插入图片描述

其他详细查看windows和linux内网/外网ip可参考博客:
https://blog.csdn.net/hmmmmm2929/article/details/81288898

所以如果你是在虚拟机或者云服务器下面装docker连接mysql,则用的是虚拟机(服务器)的ip进行连接mysql,采用命令ip addr查询的p,但是这个ip查询出来的是内网ip,不是进行远程连接的ip,应该采用服务器或者虚拟机的外网ip!!!比如服务器,就是你在阿里云上面的外网ip进行连接

这种情况下有三个ip:

Windows主机 IP:192.168.1.229(采用ipconfig查询即可)
Linux 虚拟机  IP:192.168.233.129
Docker容器  IP:172.17.0.2

docker中mysql容器 ip可以 采用docker inspect apple_mysql
在这里插入图片描述
为方便测试使用,通常我们选择在Windows主机中安装虚拟机这(这里选的是VMware Workstation),在虚拟机中部署Docker容器。而我们部署在Docker中的容器外部网络(和Windows同一层的网络)是无法访问的。
为了解决这个问题,可以采用以下这种方案。
创建容器时可以选择docker自带的端口映射功能能够跨网络实现172.17.0.2192.168.233.129的通信。参考命令如下,docker的其他使用方法这里不再赘述

docker run -di --name apple_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 代表端口映射,格式为  宿主机映射端口:容器运行端口
-e 代表添加环境变量  MYSQL_ROOT_PASSWORD是root用户的登陆密码

这里我们可以就通过访问192.168.233.12933306端口映射到172.17.0.23306端口,也就是可以直接访问mysql
这时候使用连接工具 sqlyog连接(ip是linux虚拟机ip)或者采用命令: mysql -u root -p -h192.168.233.129

2、windows下docker desktop软件连接mysql

这时候只有两个ip:

Windows主机 IP:192.168.1.229
Docker容器  IP:172.17.0.2

由于你的docker是采用windows软件docker desktop安装的,所以这时候没有虚拟机的ip,这时候连接mysql,地址就是你的本机:localhost/127.0.0.1
,也可以用上面的windows主机IP连接:192.168.1.229
在这里插入图片描述
在这里插入图片描述

注意点

注意1:
有博客(https://blog.csdn.net/underclound/article/details/77117368)说到docker在window中不会用127.0.0.1这个地址,而是使用192.168.99.100,但是我这里可以采用127.0.0.1,而后面的地址连接无效!

注意2:
这里如果你的mysql镜像pull的是最新的8.0版本的,可能会出现下面这个问题:
在这里插入图片描述
原因: mysql 8.0 默认使用 caching_sha2_password 身份验证机制;客户端不支持新的加密方式。

解决方案:
修改用户(root)的加密方式
步骤:

1、进入mysql容器内部

[root@localhost ~]# docker exec -it mysql01 bash

进入之后输入如下命令:

root@8e74f086c2bb:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.16 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

会提示并进入mysql容器:输入对应命令

mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | caching_sha2_password | $A$005$Z%@a}aqP.mjjK<t?SjMyCAGpzJJtUmnYFmTgPoqWOESUfAg9ojwPkd8HzP4 |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | caching_sha2_password | $A$005$Gr/wA/
                                                                      PHFFzz``OkyuNlZo3K6eObfcdOORjQoG3zvTztdSnkIDOgg5ZkmzRb/ |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码

输入如下命令:

mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql>flush privileges;

再次查询:

mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | mysql_native_password | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | caching_sha2_password | $A$005$Gr/wA/
                                                                      PHFFzz``OkyuNlZo3K6eObfcdOORjQoG3zvTztdSnkIDOgg5ZkmzRb/ |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

已经修改完成,重新连接mysql即可成功!

Docker for Windows使用配置说明

这篇文章已经介绍的很好了:
https://blog.csdn.net/novanova2009/article/details/86529949

参考文章:
https://www.cnblogs.com/bobkingblog/p/11070062.html
https://blog.csdn.net/liwenxia626/article/details/80848377
https://blog.csdn.net/qq_40389276/article/details/98871405

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐