• 售前

  • 售后

热门帖子
入门百科

Docker容器访问宿主机网络的方法

[复制链接]
浪漫无边际缺 显示全部楼层 发表于 2021-10-25 19:03:43 |阅读模式 打印 上一主题 下一主题
最近摆设一套系统,使用nginx作反向署理,此中nginx是使用docker方式运行:
  1. $ docker run -d --name nginx $PWD:/etc/nginx -p 80:80 -p 443:443 nginx:1.15
复制代码
需要署理的API服务运行在宿主机的 1234 端口, nginx.conf 相干配置如下:
  1. server {
  2. ...
  3. location /api {
  4.   proxy_pass http://localhost:1234
  5. }
  6. ...
  7. }
复制代码
结果访问的时候发现老是报 502 Bad Gateway 错误,错误日记显示无法毗连到upstream。
细致想一想, nginx.conf 中的 localhost 似乎有问题。由于nginx是运行在docker容器中的,这个 localhost 是容器的localhost,而不是宿主机的localhost。
到这里,就出现了本文要办理的问题:怎样从容器中访问到宿主机的网络?通过搜索网络,有如下几种方法:
使用宿主机IP

在安装Docker的时候,会在宿主机安装一个假造网关 docker0 ,我们可以使用宿主机在 docker0 上的IP地点来代替 localhost 。
首先,使用如下命令查询宿主机IP地点:
  1. $ ip addr show docker0
  2. 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  3.   link/ether 02:42:d5:4c:f2:1e brd ff:ff:ff:ff:ff:ff
  4.   inet 172.17.0.1/16 scope global docker0
  5.     valid_lft forever preferred_lft forever
  6.   inet6 fe80::42:d5ff:fe4c:f21e/64 scope link
  7.     valid_lft forever preferred_lft forever
复制代码
可以发现宿主机的IP是 172.17.0.1 ,那么将 proxy_pass http://localhost:1234 改为 proxy_pass http://172.17.0.1:1234 就可以办理 502 Bad Gateway 错误。
但是,差别系统下宿主机的IP是差别的,比方Linux下一样寻常是 172.17.0.1 , macOS下一样寻常是 192.168.65.1 ,而且这个IP还可以更改。以是使用IP配置 nginx.conf ,不能跨环境通用。
使用host网络

Docker容器运行的时候有 host 、 bridge 、 none 三种网络可供配置。默认是 bridge ,即桥接网络,以桥接模式毗连到宿主机; host 是宿主网络,即与宿主机共用网络; none 则表现无网络,容器将无法联网。
当容器使用 host 网络时,容器与宿主共用网络,如许就能在容器中访问宿主机网络,那么容器的 localhost 就是宿主机的 localhost 。
在docker中使用 --network host 来为容器配置 host 网络:
  1. $ docker run -d --name nginx --network host nginx
复制代码
上面的命令中,没有须要像前面一样使用 -p 80:80 -p 443:443 来映射端口,是由于自己与宿主机共用了网络,容器中袒露端口等同于宿主机袒露端口。
使用host网络不需要修改 nginx.conf ,仍旧可以使用 localhost ,因而通用性比上一种方法好。但是,由于 host 网络没有 bridge 网络的隔离性好,使用 host 网络安全性不如 bridge 高。
总结

本文提出了使用宿主机IP和使用host网络两种方法,来实现从容器中访问宿主机的网络。两种方法各有优劣,使用宿主机IP隔离性更好,但通用性不好;使用host网络,通用性好,但带来了袒露宿主网络的风险。

以上就是本文的全部内容,希望对各人的学习有所帮助,也希望各人多多支持草根技术分享。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作