本文详细介绍了在CentOS7上为docker配置端口转发以兼容防火墙的解决方案。文中的详细介绍非常详细,对大家的学习、培训或者工作都有一定的参考价值,朋友们一定要参考。
上当受骗在CentOS7中,当你用以下命令将服务器端口号映射到容器端口时,很可能会遇到打不开容器服务项目的问题。
dockerrun--nameweb_a-p192.168.1.250:803:80-dweb_a:beta1.0.0.当docker执行这个命令时,它将iptables的一个标准引入到项目服务器803到容器80的端口,但是在CentOS7中,firewalld服务项取代了iptables。因此,命令的端口映射不容易生效。
解决方案:首先检查服务器上的网络端口信息,确保docker0的一个虚拟网卡已经升级:
[root@localhost/home]#ifconfig docker0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.1netmask255.255.0.0broadcast172.17.255.255 inet6fe80::42:5cff:fe0e:82f9prefixlen64scopeid0x20<link> ether02:42:5c:0e:82:f9txqueuelen0(Ethernet) RXpackets1288bytes1561177(1.4MiB) RXerrors0dropped0overruns0frame0 TXpackets1594bytes108755(106.2KiB) TXerrors0dropped0overruns0carrier0collisions0 enp2s0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.1.250netmask255.255.255.0broadcast192.168.1.255 inet6fe80::76f4:9aea:4973:ec6cprefixlen64scopeid0x20<link> inet6240e:379:542:2800:8844:77ba:78dd:7prefixlen128scopeid0x0<global> inet6240e:379:542:2811:3ead:218:ba68:38e6prefixlen64scopeid0x0<global> ether74:d4:35:09:93:19txqueuelen1000(Ethernet) RXpackets10166908bytes1221399579(1.1GiB) RXerrors0dropped3014overruns0frame0 TXpackets982334bytes427296782(407.5MiB) TXerrors0dropped0overruns0carrier0collisions0 deviceinterrupt18 lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536 inet127.0.0.1netmask255.0.0.0 inet6::1prefixlen128scopeid0x10<host> looptxqueuelen1000(LocalLoopback) RXpackets1833650bytes450567722(429.6MiB) RXerrors0dropped0overruns0frame0 TXpackets1833650bytes450567722(429.6MiB) TXerrors0dropped0overruns0carrier0collisions0 vethecef228:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet6fe80::f425:f1ff:fe82:9c19prefixlen64scopeid0x20<link> etherf6:25:f1:82:9c:19txqueuelen0(Ethernet) RXpackets234bytes1520113(1.4MiB) RXerrors0dropped0overruns0frame0 TXpackets613bytes39809(38.8KiB) TXerrors0dropped0overruns0carrier0collisions0使用以下命令确定容器案例获得的虚拟ip:
dockerinspectweb_a假设容器中的ip是172.17.0.2,那么我们就为这个IP制定一个NAT共享标准,让firewalldserviceproject来解决这个标准:
#服务器端口号要求分享到容器(容器中的服务项目不必监视localhost而要监视容器分派的虚似IP或是以0.0.0.0取代) firewall-cmd--permanent--zone=public--add-masquerade开启端口号NAT分享 #将服务器803端口号要求分享到容器上的80端口 firewall-cmd--add-forward-port=port=803:proto=tcp:toaddr=172.17.0.2:toport=80--permanent #轻载标准 firewall-cmd--reload #列举全部标准 firewall-cmd--list-all public(active) target:default icmp-block-inversion:no interfaces:enp2s0 sources: services:sshdhcpv6-client ports:3306/tcp80/tcp21/tcp5000/tcp6379/tcp900/tcp801/tcp802/tcp6000/tcp5002/tcp90/tcp9092/tcp81/tcp803/tcp protocols: masquerade:yes forward-ports:port=803:proto=tcp:toport=80:toaddr=172.17.0.2 source-ports: icmp-blocks: richrules: #重启docker systemctlrestartdocker #重启容器 dockerstartweb_a经过上述实际 *** 作后,就可以用服务器IP:803浏览容器上的80端口服务项,而且不用关闭firewalld(很多在线结果都改成iptables服务项,不用于评测)。
摘要
关于如何为docker配备端口转发以兼容CentOS7上的防火墙,本文到此结束。有很多关于docker与端口转发兼容防火墙的信息。请搜索您以前的文章或再次访问下面的相关文章。期待你以后的申请!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)