介绍
介绍
关于docker做端口映射的技术,相比大家都比较属性了,不就是用port做个映射吗?简单!!!
其实,这个端口映射还是有一些道道的,大家跟着福哥来吧~~
expose
暴露端口给宿主机,这时可以通过iptables设置NAT规则将暴露出来的端口映射出来。
真实IP地址
因为是通过NAT访问的,所以服务器获取的客户端IP地址就是NAT外面的外网IP地址。
命令
docker run -tid --name test \ --net bridge2 \ --ip 10.16.1.111 \ --expose 80 \ -v /tmp/test/:/var/www/html/ \ php:7.4-apache-buster
效果
port
开放端口,这时端口可以直接被外面访问到。
真实IP地址
因为是通过NAT访问的,所以服务器获取的客户端IP地址就是NAT外面的外网IP地址。
命令
docker run -tid --name test \ --net bridge2 \ --ip 10.16.1.111 \ -p 8081:80 \ -v /tmp/test/:/var/www/html/ \ php:7.4-apache-buster
效果
KVM
如果服务器有安装KVM服务的话,一定记得把virbr0网卡给关掉。
否则我们使用port去映射容器的端口出来也不能正常使用,它只会把服务转发到本地网卡上面,即使我们通过NAT把容器的端口转发出来,在服务器端也无法得到真正的客户端IP地址了。
真实IP地址
在这个模式下面,我们通过port方式是无法让服务器获取到真实的客户端IP地址的,只能通过expose+NAT的方式才行得通了。
关闭virbr0网卡
福哥提供一下关闭KVM的默认网卡virbr0的方法。
首先,我们看看virbr0是不是存在的。
brctl show
然后,我们通过下面的命令关闭virbr0网卡。
ifconfig virbr0 down brctl delbr virbr0
效果
总结
今天福哥带着童鞋们学习了关于docker端口映射的那点事,尤其是virbr0网卡的问题。这个困扰了福哥好久好久都没有找到原因,真是想不到会是它的问题,哈哈哈~~