同福

docker端口映射和真实IP地址【20210906】

介绍

介绍

关于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

效果

home/topic/2021/0906/23/41642627135286f12da345aaf063b266.png

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

效果

home/topic/2021/0906/23/41642627135286f12da345aaf063b266.png

KVM

如果服务器有安装KVM服务的话,一定记得把virbr0网卡给关掉。

否则我们使用port去映射容器的端口出来也不能正常使用,它只会把服务转发到本地网卡上面,即使我们通过NAT把容器的端口转发出来,在服务器端也无法得到真正的客户端IP地址了。

真实IP地址

在这个模式下面,我们通过port方式是无法让服务器获取到真实的客户端IP地址的,只能通过expose+NAT的方式才行得通了。

关闭virbr0网卡

福哥提供一下关闭KVM的默认网卡virbr0的方法。

首先,我们看看virbr0是不是存在的。

brctl show

然后,我们通过下面的命令关闭virbr0网卡。

ifconfig virbr0 down
brctl delbr virbr0

效果

home/topic/2021/0906/23/5b35b8515f5a8754e372e23d5149aea4.png

总结

今天福哥带着童鞋们学习了关于docker端口映射的那点事,尤其是virbr0网卡的问题。这个困扰了福哥好久好久都没有找到原因,真是想不到会是它的问题,哈哈哈~~