docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker容器的程序连接宿主机的MySQL

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 刷新权限信息

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文