1.docker的host網絡模式簡介
host模式下,容器將不會虛擬出自己的網卡、配置IP等,而是使用宿主機的IP和端口;也就說,宿主機的就是我的。
2. 以host網絡模式創建容器
2.1 創建容器
我們仍然以tomcat這個鏡像來說明一下。我們以host模式啟動一個容器t3:
docker run -d --network host -p 8081:8080 --name t3 donkey/tomcat8:1.0.0
2.2 創建容器過程中的問題
這里我們看到兩個問題:
1.容器啟動完成后,打印的信息中有個警告信息:WARNING: Published ports are discarded when using host network mode
2.docker ps查看容器,我們指定了端口映射,但是顯示出來的信息卻沒有。
2.3 問題的分析與解釋
為了解釋這個問題,我們再啟動一個容器t4,t4我們仍然使用host網絡模式,但是我們不指定端口映射:
docker run -d --network host --name t4 donkey/tomcat8:1.0.0
這時我們發現容器創建過程中并沒有出現警告信息。為什么呢?我們看host模式下,它不僅ip都使用宿主機,就連端口也使用宿主機的的。所以就不需要再設置端口映射了,我們容器暴露的端口是什么,那么就是什么端口。這里我們t3容器暴露的端口是8080,所以我們直接就能用http://127.0.0.1:8080訪問。
那現在又有一個問題,我們啟動了t3和t4兩個容器,由于來自同一個鏡像,那么容器暴露的端口就都是8080,是一樣的,這怎么辦呢?
我們看下容器t4的日志:
docker logs t4
非常不幸,tomcat服務啟動失敗了,端口被占用了。
3. 以host網絡模式下,容器和宿主機網絡情況
3.1 大膽猜測
我認為宿主機和容器的網絡情況是一模一樣的。
3.2 宿主機的網絡情況
沒有看到之前成對出現的網卡,只有一個docker0和宿主機本身的網絡信息。
3.3 容器的網絡情況
ker exec -it t4 /bin/bash
3.4 結論
不出所料,宿主機和容器的網路情況是一樣的。