情境描述
創建一個docker容器,並進行端口映射。容器啓動後,在部署容器的主機上可以訪問映射端口,但是其他主機無法訪問。
問題排查
出現上述情況,應是請求被攔截
。出現該問題的可能是由於firewall配置異常、ip轉發關閉、iptables服務攔截了請求
排查firewall
(1) 使用firewall-cmd --state
查看防火牆運行情況
如果防火牆處於not running
,則可以排除防火牆阻斷請求的可能。
如果輸出防火牆處於running
則表示防火牆正在運行,需進行下一步排查
(2) 使用firewall-cmd --list-ports
和firewall-cmd --list-services
查看防火牆開放了哪些端口和服務。如果開放的端口中沒有包含docker容器對外映射的端口,則可以採取以下解決方式:
- 關閉防火牆服務
systemctl stop firewalld.service
- 添加策略打開指定端口
$ firewall-cmd --add-port=port/tcp --premanent
$ firewall-cmd reload
查看ip轉發是否開啓
通過cat /proc/sys/net/ipv4/ip_forward
查看ip轉發是否開啓。如果該值爲0
則需要配置其開啓
$ echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf