Docker 端口映射客戶不能正常訪問


問題描述

我在A服務器上啟動了個apache的docker,使用命令如下

docker run -id -p 8080:80 --name test_apache -v /var/www/houtai:/var/www/houtai apache:latest

docker啟動之后,使用netstat -ntalp | grep 8080 發現端口監聽成功,然后就到客戶機去發起請求發現請求不成功,提示連接失敗,然后使用telnet發現8080端口不通,這個時候去檢查firewalld 和selinux發現都是處於關閉狀態,在A服務器上telnet8080端口發現正常通信,使用iptables -t nat -L檢查iptables轉發正常,但是就是不通,

問題解決辦法

根據上面問題排查分析后 肯定是轉發那一塊出問題了,於是想到Linux轉發要開啟內核轉發功能net.ipv4.ip_forward,於是檢查內核轉發是否打開

[root@localhost ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0 

發現狀態為0代表內核轉發沒有打開,估計問題就是這個鬼造成的,於是打開內核轉發參數

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@localhost ~]# sysctl -p #刷新下內核參數 

然后客戶端再次請求發現正常。

反思

1,docker 的proxy在1.7 版本之后全部都依賴於iptables
2,所以docker轉發的時候實際上是在iptables上創建了一個轉發規則,然后根據這個轉發規則來進行轉發
3,iptables需要轉發就必須要開啟網卡轉發功能,也就是net.ipv4.ip_forward要出於開啟狀態

檢查流程:

1, 檢查docker 容器是否啟動正常
2,使用docker port Name 查看容器端口是否映射成功
3,使用iptables -t nat -nL 查看iptables轉發鏈是否配置成功
4,檢查網卡轉發是否開啟

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM