前言
在使用docker部署应用时,如果应用需要连接到数据库,而数据库部署在宿主机上,此时如果在docker内部使用localhost(127.0.0.1)连接宿主机的数据库,会发出报错,连接失败。
连接失败的原因是,在docker内部使用localhost指的是连接到docker容器内部自己的环回地址,而不是主机的环回地址,因为docker容器内部的网络和主机的网络是完全隔开的,现在就需要使用到网桥来连接到宿主机网络,通过网桥连接到主机服务的办法一共有俩种:1.使用主机内网地址 2.使用docker网桥
操作方法
1.使用主机内网地址
首先输入命令ifconfig 查看内网地址
inet后方跟着的10.0.16.3即是主机的内网地址(不同主机内网ip不同,有可能是192开头或者10开头,当然也可能直接没有)
将docker服务需要连接的host更改为此内网地址,即可实现连接部署在主机的服务
2.使用docker网桥
仍然是ifconfig 查看docker网桥位置
inet后面跟着的172开头的地址即是docker网桥地址,172.18.0.1和172.17.0.1(目前博主发现这两个地址都可以作为网桥使用,并未发现实质区别)
将docker服务需要连接的host更改为此网桥地址,即可实现连接部署在主机的服务
ps:在这种情况,可以将172.18.0.1和172.17.0.1直接视为宿主机的127.0.0.1环回地址
总结
docker连接到宿主机网络是一个经常遇到但略微有一点容易疑惑的问题,网上的教程很多比如使用host.docker.internal来桥接主机网络,博主发现这个办法没办法连接到主机网络,所以折腾了一会儿发现了以上俩种办法
此教程是本站文章:使用Docker部署容器项目时,无法连接Redis服务器的解决方案。 (sereniblue.com)的进阶和简化
如果您也遇到了docker容器连接主机网络的问题,希望教程对您有帮助。
Comments NOTHING