Docker容器访问宿主机网络的方法
容器内部安装ping命令容器中安装ping工具:
sudo apt-get update && apt-get install iputils-ping
root@884631624f24:/# sudo apt-get update
root@884631624f24:/# apt-get install iputils-ping
测试Ping命令
root@884631624f24:/# ping www.baidu.com PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data. 64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=52 time=11.3 ms 64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=52 time=11.2 ms ^Z [1]+ Stopped ping www.baidu.com root@884631624f24:/#
方式一:使用宿主机IP
在安装Docker的时候,会在宿主机安装一个虚拟网关 docker0 ,我们可以使用宿主机在 docker0 上的IP地址来代替 localhost 。
首先,使用如下命令查询宿主机IP地址:
[root@VM-16-16-centos ~]# ip addr show docker0 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:3f:c5:b6:67 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:3fff:fec5:b667/64 scope link valid_lft forever preferred_lft forever [root@VM-16-16-centos ~]# [root@VM-16-16-centos ~]#
可以用172.17.0.1代替localhost访问宿主机
注意:不同系统下宿主机的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 网络:
docker run -d --name nginx --network host nginx
上面的命令中,没有必要像前面一样使用 -p 80:80 -p 443:443 来映射端口,是因为本身与宿主机共用了网络,容器中暴露端口等同于宿主机暴露端口。
使用host网络不需要修改 nginx.conf ,仍然可以使用 localhost ,因而通用性比上一种方法好。但是,由于 host 网络没有 bridge 网络的隔离性好,使用 host 网络安全性不如 bridge 高。
总结
宿主机IP隔离性更好,但通用性不好。
host网络,通用性好,但带来了暴露宿主网络的风险。
本文地址:百科问答频道 https://www.neebe.cn/wenda/927380.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!