虚拟机(云服务器)/windows下docker desktop连接docker中mysql
文章目录
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.2
与192.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.129
的33306
端口映射到172.17.0.2
的3306
端口,也就是可以直接访问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容器内部
[aaa@qq.com ~]# docker exec -it mysql01 bash
进入之后输入如下命令:
aaa@qq.com:/# 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
上一篇: Nginx预发布多个网站及配置域名
下一篇: md