欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虚拟机(云服务器)/windows下docker desktop连接docker中mysql

程序员文章站 2022-07-14 12:35:00
...

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

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

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

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

其他详细查看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下docker desktop连接docker中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
虚拟机(云服务器)/windows下docker desktop连接docker中mysql
虚拟机(云服务器)/windows下docker desktop连接docker中mysql

注意点

注意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版本的,可能会出现下面这个问题:
虚拟机(云服务器)/windows下docker desktop连接docker中mysql
原因: 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

相关标签: 分布式专题