win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。

这里需要较多的理论知识,但现在还未全明白,但是走过的一遍流程大致知道些。在这里记录下学到的理论并用于实践这个demo。
这里主要会用到网络知识、linux的命令、以及docker容器网络的原理、数据库等相关知识。

虚拟机中的几种网卡的设置以及访问关系:

win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第1张图片
查看 win10 的网络ip的方式:ipconfig
linux的查看物理机的IP地址命令:ipconfig /all

虚拟机要使用Nat模式,便于ubuntu系统访问外网,同时便于(宿主主机)本地win10访问docker容器的数据库。

1、NAT,NetWork Address Translation/网络地址转换。
虚拟机最简单的一种网络连接方式,虚拟主机通过NAT方式进行网络连接,此时的VirtualBox相当充当了一个路由器,连通了虚拟主机(比如linux系统)和宿主主机(win10)。一方面虚拟主机与宿主主机共享宿主主机在网络中的IP,另外一方面虚拟主机也由VirtualBox事先设置的IP中DHCP分配一个10.0.X.XX的IP地址,这就是为什么我们查看虚拟主机的ip的地址时,是一个10网段的ip。
虚拟机的中系统的ip:
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第2张图片

即使得ubuntu系统只能从内访问外面而不能从外部访问里面,所以只能单向ping通,虚拟机的ip只是内部ip。(由于虚拟主机也有VirtualBox自动分配的10网段的IP,所以宿主主机及宿主主机网络中的其他机器一般情况下不能访问该虚拟主机,该虚拟主机一般情况下不能访问其他虚拟主机。)
2、为了提供 win 10 访问虚拟机
VirtualBox就提供了一种Port Forwording(端口转发)方式访问虚拟主机 (即在NAT模式只有通过绑定静态转发才可能从外部访问。)
Port Forwording(端口转发)方式访问虚拟主机配置方式:
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第3张图片
这里的在这里插入图片描述
几个重要的名词含义:
主机、主机端口:
主机端口则是主机端网络访问虚拟机应用的端口,可按自己需要设置,主机端网络通过主机IP:主机端口,访问虚拟机应用,如ssh连接地址为主机IP:2222 。
子系统ip 、子系统端口:
子系统IP填写虚拟机获取的IP,子系统端口为虚拟机应用的端口,http默认80,ssh默认22。

这里使用这种端口转发的方式,访问虚拟机特定的端口,因此虚拟机的ubuntu系统开放特定的端口。
虚拟机的端口转发设置的可以参考:
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第4张图片
其中 主机ip是你的虚假机的ip ,,端口是你的虚拟机的特定端口。这里可以在win10 的cmd 输入 ipconfig得到:
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第5张图片
比如得到的ipv4:192.168.15.25

其中,子系统ip是虚拟机的ubuntu系统的ip地址,端口是ubuntu系统tcp/udp开放端口。
ubuntu 终端输入 ifconfig得到:
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第6张图片
比如:10.0.2.15 ,端口可以为3307.

打开ubuntu 的系统的3307 端口:
1、关闭ubuntu 的系统的3307 端口的防火墙
命令:sudo ufw status 查看防火墙的状态。
sudo ufw allow 3307 ,暴露3307的端口
netstat -a 查看端口
参考:https://www.cnblogs.com/kuoAT/p/7513380.html,

2、使用telnet win 10 查看ubuntu 端口是否打开:

在控制面板处>程序>(下拉页面到最后)程序和功能>左边的启用和关闭Windows功能>开启telent服务)
然后(Win+ R 键) 可以用telent 方式先试下能不能拼通服务器端口。
命令:telnet [ip] [端口]
例如检测虚假机的ip :telnet 192.168.15.25 3306

打开win 10的telnet 服务可以参考:
https://bbs.csdn.net/topics/392011459
https://blog.csdn.net/kexiaoling/article/details/53857322

3、在ubuntu 中启用docker 的MySQL 的容器,docker 的使用安装,详细参考:
https://blog.csdn.net/qiu_zhi_world/article/details/88690488
1、docker拉取mysql 镜像:docker pull mysql
2、使用mysql镜像生成容器,并启动:
在这里插入图片描述
这里将容器的3306端口映射到虚拟机ubuntu的3307的端口,即虚拟机ubuntu通过本地的3307访问数据库mysql 。
要是关闭的容器mysql103,可以通过 docker start mysql103,
操作docker 的容器命令可以参考:https://blog.csdn.net/qiu_zhi_world/article/details/88726204

3、为的使得win 10能访问容器的mysql103的数据库,要对数据库访问设置为远程访问的模式,进入mysql103数据库修改权限:
进入docker容器:
docker
4、进入数据库:mysql -u root -p (需要设置好的密码)
5 、设置数据库远程登入的权限:
参考:https://blog.csdn.net/louisliaoxh/article/details/52767209
mysql 版本8
create user  'root'
如:

create 'root'@'%' identified by '1234'
grant privileges on *.*to  'root'@'%' with grant option;
flush privileges;

4、可以通过navicat 访问Virtulbox的 Ubuntu系统 中的docker容器 中数据库mysql103
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第7张图片
这里设置的主机名,已经可以使用主机ip 即的虚假机的ip、端口代替。
(虚拟机的ip 、端口会转发,Ubuntu系统的的ip、端口,在转发到docker容器的端口、ip??)
5、最后访问成功。
win10 访问 Virtulbox的 Ubuntu系统 中的docker容器 的数据库。_第8张图片

遇到的坑:1、遇到navicat 的版本过低的情况,navicat not support authentication protocal。。。。。。
原因:

出现这个原因是mysql8.0
之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,
解决此问题方法有两种,一种是升级客户端驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password。

参考: https://blog.csdn.net/yubin1285570923/article/details/83352491

2、以上参考存在这个mysql 版本问题,会影响命令使用方式,如下:

-- 修改密码为用不过期
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 
Query OK, 0 rows affected (0.02 sec)

-- 修改密码并指定加密规则为mysql_native_password
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

-- 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>

在mysql8之后有些变化:

ALTER USER 'root'@'%'  PASSWORD EXPIRE NEVER; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

3、

新版SQL授权用户时报错 near ‘IDENTIFIED BY ‘密码’ with grant option’ at line 1
也是版本问题。
参考;https://blog.csdn.net/vin_1991216/article/details/82632710

https://www.cnblogs.com/crxis/archive/2019/03/04/10469008.html
https://www.cnblogs.com/gjc592/p/9681093.html

2、ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
远程访问的账户为设置密码。
参考:https://www.cnblogs.com/charlesblc/p/5904522.html

参考:虚拟机几种网卡配置:
https://blog.csdn.net/nsxqf/article/details/83543563

docker 的网络ip与虚拟机、容器实例、本地网卡关系(桥接方式?):
https://bbs.csdn.net/topics/391977898
容器与容器之间的访问:
https://blog.csdn.net/zhang197093/article/details/78416029

你可能感兴趣的:(docker)