docker端口映射及虛擬機掛起重開無法遠程訪問的理解


關於端口映射:

在啟動容器時,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的,因為沒有端口。用個數據流便於理解:

假設我們要訪問mysql,那么數據流的流向是這樣的

數據流:外部數據——>主機:3306——>docker:3306

當然端口可以任意關系映射,docker的端口是mysql對外開放的端口即可

 

虛擬機掛起重開無法遠程訪問mysql

關於這個問題,我們可以回到數據流的模型,這時我們發現一個問題,這里就涉及到一個數據包轉發的知識。

出於安全考慮,Linux系統默認是禁止數據包轉發的。所謂轉發即當主機擁有多於一塊的網卡時,其中一塊收到數據包,根據數據包的目的ip地址將數據包發往本機另一塊網卡,該網卡根據路由表繼續發送數據包。這通常是路由器所要實現的功能。
 
這里有一個問題,就是既然禁止數據包轉發,那么每次容器重新啟動為什么就能正確連上?這是因為在啟動的時候觸發了臨時生效此種的配置方式,而在系統重啟,或對系統的網絡服務進行重啟后都會失效。
虛擬機的掛起,相當於物理機中的休眠,會將內存中的數據全部存放到對應的休眠文件中,占用的空間為內存大小,並且會對虛擬機執行關機操作。休眠后的虛擬機不占任何CPU、內存。掛起激活讀取了內存文件,但系統是相當於重啟了,所以臨時生效的配置方式就因此失效。
 
想要完全解決這個問題,可以修改 /etc/sysconfig/network配置文件,添加FORWARD_IPV4=YES,然后service netwrok restart重啟激活
 
當然這個問題實際上也不是什么大問題,重啟下docker就可以解決了,但這后面設計到的知識確實不少,值得需要記錄下


免責聲明!

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



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