Docker容器的程序连接宿主机的MySQL全过程
作者:若水印象
这篇文章主要介绍了Docker容器的程序连接宿主机的MySQL全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Docker容器的程序连接宿主机的MySQL
docker里面的代码生成的数据需要写入到宿主机的Mysql
服务器上,想要用本地的数据库测试自己的代码正确性,项目程序安装在docker容器中,于是必定要在docker容器里访问到本地的数据库。
(1)在docker容器里localhost并不是指宿主机的localhost
因此不能在容器中通过localhost:3306访问到宿主机的mysql,也不可以通过127.0.0.1访问。
(2)docker在运行时就建立了虚拟网卡
并命名为docker0,可以在宿主机上运行ifconfig看到它,这就是宿主机建立的网桥,用于与各个容器之间通信。
[root@VM-8-15-centos ~]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:53ff:fed0:4c11 prefixlen 64 scopeid 0x20<link> ether 02:42:53:d0:4c:11 txqueuelen 0 (Ethernet) RX packets 4489 bytes 6944799 (6.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3379 bytes 999348 (975.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig 为什么看不到 docker0
在最近的 Docker 版本中,docker0 网络接口已经被弃用,因此您在使用最新版本的 Docker 时可能看不到该接口。
相反,Docker 现在使用名为 bridge 的网络驱动程序来管理 Docker 容器的网络连接。您可以使用 ip addr 命令来查看当前正在运行的 Docker 网络:
$ ip addr show docker0
(3)宿主机在与容器同一局域网的IP地址
一般是docker0对应的IP地址段的首个地址(如172.17.0.1),因此,可以在容器里通过172.17.0.1:3306访问到宿主机的mysql服务器。
mysql服务器默认的设置为允许127.0.0.1段的ip地址访问
如果用172.17.0.1:3306仍然无法访问到宿主机的话,需要设置一下mysql的访问权限:
如果用的是宝塔面板,可以给nacos这个数据库设置权限为所有人
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION; mysql>flush privileges; // 其中各字符的含义: // *.* 对任意数据库任意表有效 // "root" "12345678" 是数据库用户名和密码 // '%' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP // flush privileges 刷新权限信息
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。