AI 摘要

在使用Docker部署应用时,如果需要连接宿主机上的数据库,直接使用localhost会导致连接失败。原因在于Docker容器内部的网络与宿主机的网络是隔开的。要连接宿主机网络,可以通过两种方法:使用主机内网地址或Docker网桥地址。 1. **使用主机内网地址**:通过命令ifconfig获取主机的内网地址(如10.0.16.3),将Docker服务中需要连接的host更改为该内网地址即可。 2. **使用Docker网桥**:同样通过ifconfig查看Docker网桥地址,通常是172开头的地址(如172.18.0.1或172.17.0.1),将Docker服务的host更改为此网桥地址即可。 总结而言,Docker连接宿主机网络的方式有以上两种,个人发现其他桥接方法如使用host.docker.internal无法有效连接,希望对遇到同样问题的人有所帮助。

前言

Docker

在使用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网桥位置

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服务器的解决方案。的进阶和简化

如果您也遇到了docker容器连接主机网络的问题,希望教程对您有帮助。