docker容器啟動后添加端口映射
概要
網(wǎng)上有許多人在查找關(guān)于容器啟動后能否進(jìn)行端口映射的問題。我曾經(jīng)也問過度娘,很遺憾我沒找到。本文就這個問題給出一個解決方法,旨在拋磚引玉。本文的思路是使用iptables的端口轉(zhuǎn)發(fā),這也是docker端口映射內(nèi)部的實(shí)現(xiàn)機(jī)制,只不過我是顯示地寫出來罷了,為的就是讓查找這個問題的人對docker的端口映射有一個直觀的了解。
結(jié)論:容器啟動后是可以添加端口映射的,但不建議手工添加,最好使用docker提供的功能。
步驟
創(chuàng)建兩個容器并進(jìn)行了端口映射,結(jié)果如圖所示:
假如,我start一個容器,其內(nèi)部IP為172.17.0.5,并在容器內(nèi)部啟動了80端口。
FORWARD規(guī)則鏈我們不用管它,docker已經(jīng)幫我們寫好了,我們只需要關(guān)心NAT中的幾條鏈即可。
查看NAT表中的PREROUTING鏈
從上面可以看出,iptables將滿足條件的數(shù)據(jù)都轉(zhuǎn)發(fā)到了DOCKER鏈上去了。
查看NAT表中的DOCKER鏈
仿照上圖,我們添加一條自己的映射規(guī)則,將宿主的8082端口映射到172.17.0.5的80端口上去,規(guī)則如下:
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8082 -j DNAT --to-destination 172.17.0.5:80
查看NAT表中的POSTROUTING鏈
仿照上圖中的規(guī)則,書寫的規(guī)則如下:
iptables -t nat -A POSTROUTING -s 172.17.0.5/32 -d 172.17.0.5/32 -p tcp -m tcp --dport 80 -j MASQUERADE
查看FILTER表中的DOCKER鏈
仿照上圖書寫規(guī)則如下:
iptables -t filter -A DOCKER -d 172.17.0.5/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
結(jié)果
雖然IP為172.17.0.5的容器沒有開啟端口映射,如下圖所示:
但我們依然能夠通過訪問宿主機(jī)(192.168.78.238)的8082端口來訪問172.17.0.5的80端口,效果如下:
使用此方法有一個缺點(diǎn),不能訪問localhost:8082,也就是說如果想對localhost也進(jìn)行轉(zhuǎn)發(fā),需要進(jìn)行額外的配置。
結(jié)論
建議大家不要像我這樣去做端口映射,我這么做只是為了闡述標(biāo)題。
如果大家在容器中添加了一些東西,并開啟了端口,同時呢,又想多復(fù)制幾個這樣的容器。建議大家把容器提交成鏡像,然后使用docker提供的端口映射功能。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker容器導(dǎo)致磁盤空間不足無法訪問的解決方法
本文主要介紹了Docker容器導(dǎo)致磁盤空間不足無法訪問的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Docker?安裝Tomcat、實(shí)現(xiàn)Tomcat集群的詳細(xì)過程
這篇文章主要介紹了Docker安裝Tomcat、實(shí)現(xiàn)Tomcat集群,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06docker清理大殺器/docker的overlay文件占用磁盤太大的解決
這篇文章主要介紹了docker清理大殺器/docker的overlay文件占用磁盤太大的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Docker-compose 建立ELK集群的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker-compose 建立ELK集群的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01docker 編輯Dockerfile 添加php7.2 acpu的問題
這篇文章主要介紹了docker 編輯Dockerfile 添加php7.2 acpu問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07解決vscode docker插件docker.socket權(quán)限問題
本文給大家分享關(guān)于vscode docker插件docker.socket權(quán)限問題,文末給大家提到vscode中docker插件無法連接的問題及解決方案,需要的朋友參考下吧2021-06-06導(dǎo)出與導(dǎo)入Docker的容器實(shí)現(xiàn)示例
本文主要介紹了導(dǎo)出與導(dǎo)入Docker的容器實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12elasticsearch?組件基于單機(jī)的多實(shí)例集群部署方法
es 作為搜索引擎,應(yīng)用場景不乏日志分析、網(wǎng)絡(luò)安全、搜索引擎等,有時也會用作日志數(shù)據(jù)庫使用,畢竟其出色的搜索查詢性能,不是同等量級 關(guān)系型數(shù)據(jù)庫可以比擬的,這篇文章主要介紹了elasticsearch?組件基于單機(jī)的多實(shí)例集群,需要的朋友可以參考下2024-03-03