關於docker中容器可以Ping通外網,真機無法Ping通容器的問題


  首先我們要知道整體的框架結構,docker是我們安裝在centos7上的,而centos7是安裝在vmware上。其中docker中還有若干容器運行。

整體框架圖如下:

  

 

    我們將它分為兩部分,一部分是docker環境,除去docker的所有划分到另一個部分。(我們知道centos7和我們的真機是同一個網段的ip,不需要配置之間可以相互通信)。那dokcer本身又是一個大整體,其下面還有很多我們生成的容器,他們的ip是由docker的虛擬網卡生成的,他們是一個網段的。彼此之間應該是可以相互ping通的。

    例如我的docker中ubuntu的ip為172.17.0.2,而真機和centos7是192.168網段的。

      

       

       

 

 

  之前我們嘗試過,發現docker的ubuntu竟然也可以ping通外網,按道理它不是應該不通向外網的嗎?后來知道,在docker環境中,不同的容器就像相當於不同的主機,而docer本身將它們互通,起到了交換機的作用,同時,docker本身也有着路由功能,自帶dhcp和nat服務。我們都知道(你知道嗎)NAT服務是將一個網段的ip轉換為另一個網段的ip來進行通信。

   按照最上面的框架圖來說,docker中的ubuntu(172.16.111.1)想要去連接外網,docker發現它和外網的ip網段不同,自動轉換為172.16.3.222。這時候,和我們外面的真機環境網段匹配了,就可以正常通信了。而當我們真機環境的主機去尋找ubuntu容器時,發現找不到172.16.111.1,就會出現請求超時或者目標不可達的現象。

  問題找到了,那么解決辦法也很簡單,既然主機找不到,那我們就添加一條靜態即可,當我們真機去ping172.16.111.1時,人為的將它轉換為192.16.3.222,這時候自然也能ping通了。

      

 

 

  上一篇我們的解決辦法是在創建容器的一開始就配置端口映射,使得我們能夠通過ssh連接到ubuntu,但也是不能直接ping通ubuntu的。但對我們后序使用無關緊要。在實驗過程中我查到很多人說可以再配置防火牆來實現,但是我出現了報錯的現象,未能解決,希望評論區大佬指正。

 

      安裝完iptables后想要查看占用,報錯說我不是root用戶,但是看前面的提示符可以看到我就是root用戶登錄的。

     

 

        以及我之前安裝完防火牆,進行任何操作都會有類似的報錯,說我不是root用戶?

 


免責聲明!

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



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